我试图将一个字符串与一行匹配,然后对该行进行两次更改。例如,对于行";教父;,我想匹配";,";,删除";,";并添加";";到生产线的开始;"教父";。我试过sed和我所知道的所有其他东西(诚然不多(,但只能对线路进行一次更改,而不能进行两次更改。有什么帮助吗?
echo -e 'asdf ttrtnGodfather, The' | gawk '/, The/{gsub(", The", ""); print "The " $0; next} 9'
asdf ttrt
The Godfather
首先找到匹配线(/, The/
(。仅对于匹配行({gsub(...), ...}
(,删除匹配图案,并打印整个剩余行,并预加"The "
。next
只打印一次匹配行(在The
预处理的情况下,停止处理当前行并进入下一行(。9
只是一个非零数字,用于指示gawk也打印不匹配的行。
链接或两个:
- https://www.cyberciti.biz/faq/awk-find-and-replace-fields-values/
- https://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html
- awk可以打印没有图案的线条吗
这是sed
中的一个事务。
echo 'Godfather, The' | sed -E 's/^(.+), The$/The 1/'
The Godfather
如果需要2,请在脚本中使它们独立操作。
echo 'Godfather, The' | sed -E 's/^(.+), The$/The 1/; s/Godfather/Exorcist/;'
The Exorcist
或
echo 'Godfather, The' |
sed -E 's/^(.+), The$/The 1/
s/Godfather/Exorcist/'
The Exorcist
使用perl:
perl -pe 's/(.*), The$/The $1/' <<< "Godfather, The"
# output :
# The Godfather
或sed:
sed -E 's/^(.*), The$/The 1/' <<< "Godfather, The"
sed不需要捕获组。
sed '/, The$/{s///;s/^/The /}'
在以, The
结尾的行中,删除以s///
结尾的行(重复上一个匹配,不替换任何匹配(。然后,在该行的开头添加The
。