Sed 匹配后替换字符串
我有一堆文件,看起来像这样:Sed 匹配后替换字符串,sed,awk,cat,Sed,Awk,Cat,我有一堆文件,看起来像这样: 1x 4b 2x 4b 3x 4b .subckt test xxx 1t 4b 2t 4b 2x 4b $ sed -e '1,/^\.subckt test xxx$/b' -e 's/ 4b/ 8b/' 因此,我的问题是如何将“.subkt test xxx”之后的4b替换为8b,并覆盖原始文件。并递归地对该文件夹中的所有文件执行此操作。我会这样做: 1x 4b 2x 4b 3x 4b .subckt test xxx 1t 4b 2t 4b 2x
1x 4b
2x 4b
3x 4b
.subckt test xxx
1t 4b
2t 4b
2x 4b
$ sed -e '1,/^\.subckt test xxx$/b' -e 's/ 4b/ 8b/'
因此,我的问题是如何将“
.subkt test xxx
”之后的4b
替换为8b
,并覆盖原始文件。并递归地对该文件夹中的所有文件执行此操作。我会这样做:
1x 4b
2x 4b
3x 4b
.subckt test xxx
1t 4b
2t 4b
2x 4b
$ sed -e '1,/^\.subckt test xxx$/b' -e 's/ 4b/ 8b/'
这将跳过(b
)进一步处理,直到遇到特征线。之后,s
命令将在其余行中执行替换
要覆盖原始文件,请使用-i
,可选地使用备份文件后缀:-i.bak
您可以将多个文件(在一个文件夹中)传递给sed;如果希望递归到子目录中,请使用
find
和xargs
等搜索解决方案。我会这样做:
1x 4b
2x 4b
3x 4b
.subckt test xxx
1t 4b
2t 4b
2x 4b
$ sed -e '1,/^\.subckt test xxx$/b' -e 's/ 4b/ 8b/'
这将跳过(b
)进一步处理,直到遇到特征线。之后,s
命令将在其余行中执行替换
要覆盖原始文件,请使用-i
,可选地使用备份文件后缀:-i.bak
您可以将多个文件(在一个文件夹中)传递给sed;如果希望递归到子目录中,请使用
find
和xargs
搜索解决方案,例如使用awk
:
awk '/.subckt test xxx/ {f=1;print;next} f && $2=="4b" {$2="8b"} 1' orgfile >tmpfile ; mv tmpfile orgfile
使用
awk
:
awk '/.subckt test xxx/ {f=1;print;next} f && $2=="4b" {$2="8b"} 1' orgfile >tmpfile ; mv tmpfile orgfile
以上内容不适用于包含换行符的文件名,因此如果您遇到这种情况,请告诉我们获得不同的解决方案(提示:xargs)
对于GNU awk的最新版本,如果愿意,可以使用-i inplace
避免显式指定临时文件名
以上内容不适用于包含换行符的文件名,因此如果您遇到这种情况,请告诉我们获得不同的解决方案(提示:xargs)
对于GNU awk的最新版本,如果愿意,可以使用-i inplace
避免显式指定临时文件名