我有这个:
echo "walking ringer talking"
如何使用 sed 来实现以下输出?
walked ringer talked
我尝试了多种方法,但无法使其发挥作用。以下命令是我尝试过的。
echo "walking ringer talking" | sed 's/ing/ed/g'
这输出walked reder talked
.
echo "walking ringer talking" | sed 's/ing$/ed/g'
这输出walking ringer talked
.
echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g'
这输出walking ringer talked
.
我正在尝试在 bash 脚本中完成此操作。
答案1
要匹配模式末尾的空格或换行符,您可以使用:
sed -E 's/ing( |$)/ed\1/g'
答案2
awk 会将字符串分成三部分并对所需元素进行替换。然后print $0
将返回整个(新)字符串。
echo $s | awk 'BEGIN{a[1]=a[3]}{for(x in a)gsub("ing","ed",$x); print $0 }'
答案3
您可以使用“词尾”标记:
$ echo "walking ringer talking" | sed 's/ing\>/ed/g'
walked ringer talked
\>
匹配左侧有单词字符、右侧有非单词字符的情况。
或者,不太具体,带有单词边界:
$ echo "walking ringer talking" | sed 's/ing\b/ed/g'
walked ringer talked
\b
匹配任何单词边界,但如果它跟随单词字符,则相当于\>
.
答案4
's/ing /ed /g;
在第三次测试中添加空间 ;
#echo "walking ringer talking" | sed 's/^ing/ed/g;s/ing$/ed/g'
echo "walking ringer talking" | sed 's/ing /ed /g;s/ing$/ed/g'
例如:
user@host:/tmp/test$ echo "walking ringer talking" | sed 's/ing /ed/g;s/ing$/ed/g'
walked ringer talked