Awk 使用sed命令将缩写字符串(美国)替换为美国
如何使用sed命令将“U.S.a.”等字符串替换为“USA”或“D.a.R.p.a.”替换为DARPA。“字符串”不是字符串的一部分 所以我的目标是只替换大量文本中的缩写 我尝试了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“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
由于\.
是元字符,需要对其进行转义以匹配它- 另请参见以了解何时使用单引号/双引号
这将删除前面带有单字符大写单词的
。目标是在问题中添加一些自己的代码,以至少显示您自己为解决此问题所做的研究工作。您是否尝试删除这些点?(例如,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