Awk 使用sed命令将缩写字符串(美国)替换为美国

Awk 使用sed命令将缩写字符串(美国)替换为美国,awk,sed,Awk,Sed,如何使用sed命令将“U.S.a.”等字符串替换为“USA”或“D.a.R.p.a.”替换为DARPA。“字符串”不是字符串的一部分 所以我的目标是只替换大量文本中的缩写 我尝试了sed“s///g”file.txt>file2.txt,但这取代了所有出现的点 然后我尝试了一系列不同的组合,比如: sed“s/([A-Z]\)+/[A-Z]/g”file.txt>file2.txt 这显然不起作用 显然,终端不接受()括号或嵌套括号 如果我想用非常具体的东西来替换一个字母后跟一个点,我可以使用s

如何使用sed命令将“U.S.a.”等字符串替换为“USA”或“D.a.R.p.a.”替换为DARPA。“字符串”不是字符串的一部分

所以我的目标是只替换大量文本中的缩写

我尝试了
sed“s///g”file.txt>file2.txt
,但这取代了所有出现的点

然后我尝试了一系列不同的组合,比如:

sed“s/([A-Z]\)+/[A-Z]/g”file.txt>file2.txt
这显然不起作用

显然,终端不接受()括号或嵌套括号


如果我想用非常具体的东西来替换一个字母后跟一个点,我可以使用
sed“s/[a-Z]/a/g”file.txt>file2.txt
遵循
sed
同样可以帮助你,基于它的逻辑
sed s/old_值/new_值/g
,它很简单

echo "U.S.A." | sed 's/\.//g'
解决方案2:因为OP已经改变了他的问题,所以现在也添加了这个答案。 假设我们有以下输入文件

cat Input_file
U.S.A. D.A.R.P.A.
fewqfewfew fwefjwefu1e13rvnoi.wbvwvnwv
D.A.R.P.A. wnvwnvnewv nwvnrwnvrwnvrw


awk --re-interval '
{
  val=$0;
  while(match(val,/([a-zA-Z]{1,}\.{1,}){1,}/)){
    value=value1=substr(val,RSTART,RLENGTH);
    gsub(/\./,"",value1);
    sub(value,value1,$0);
    val=substr(val,RSTART+RLENGTH)}
}
1
'  Input_file
输出如下

USA DARPA
fewqfewfew fwefjwefu1e13rvnoiwbvwvnwv
DARPA wnvwnvnewv nwvnrwnvrwnvrw
注意:我的
awk
是旧版本的,如果您有最新版本的
awk
,那么您不需要在上述代码中使用
--重新间隔

您可以尝试此方法

sed -E ':A;s/([A-Z]\.)([A-Z]\.{1,})/.\1.\2/;tA;s/(\.{1,})([A-Z])(\.)/\2/g' infile

假设OP只想删除大写字母后面的点

$ s='U.S.A. foo.bar D.A.R.P.A. a.b.'
$ echo "$s" | sed 's/\([A-Z]\)\./\1/g'
USA foo.bar DARPA a.b.

$ # if ERE is available as -E or -r option
$ echo "$s" | sed -E 's/([A-Z])\./\1/g'
USA foo.bar DARPA a.b.
  • \([A-Z]\)
    是,而
    \1
    是对匹配字符串的反向引用
  • \.
    由于
    是元字符,需要对其进行转义以匹配它
  • 另请参见以了解何时使用单引号/双引号
这可能适合您(GNU-sed):


这将删除前面带有单字符大写单词的

目标是在问题中添加一些自己的代码,以至少显示您自己为解决此问题所做的研究工作。您是否尝试删除这些点?(例如,sed's/\.//g')您好,我尝试了一系列不同的组合,我将编辑原始问题。为模糊的描述道歉。我想澄清一下,我可以使用(([a-Z])\)匹配缩写字符串+模式和许多其他组合。我需要sed命令的帮助。我也尝试在本在线教程中查找我的具体案例,但找不到任何相关内容,因此我在此处发布了一个问题。上次我检查这是一个空间,您可以问一些您不知道答案的问题。嗨,我编辑了我的问题。我要替换。仅限特定单词的字符hi@RavinderSingh13谢谢。你能告诉我模式中最后的“1”是什么吗?@ketanShah,
awk
作用于条件和动作的方法。因此,我在这里通过提及
1
而不提及任何动作来实现条件,这样就会出现当前行的默认打印。@RavinderSingh13 awk解决方案似乎离sed的//\.//g'还有很长的路要走。我是否遗漏了什么?在这种情况下,只需使用sed或gensub和gawk…imo match/substr是一个复杂的解决方案。。
sed 's/\b\([[:upper:]]\)\b\./\1/g' file