Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 匹配后替换字符串_Sed_Awk_Cat - Fatal编程技术网

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
避免显式指定临时文件名