如何用新段落替换段落
How to replace a paragraph with new paragraph
我有一个包含很多 PIN 的文件。情况如下图
PIN ABC
DIRECTION INPUT
USE SIGNAL
我想将其替换为
PIN ABC
DIRECTION INPUT
USE POWER
只有当文件中出现 PIN ABC 时,信号才会变为电源。是否可以用grep或awk来完成。
你可以使用这个awk
awk '/^PIN ABC/ {a=NR} a+2==NR {="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
如果PIN
和USE
之间的行数不固定:
awk '/^PIN/ {f=1} f && /^USE/ {="POWER";f=0} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
使用 awk
,在 PIN ABC
行之后重写以 USE
开头的行。最后的 1
打印(可能修改过的)行。
$ awk '/^PIN/{pin=} /^USE/&&(pin=="ABC"){="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
假设您的 "paragraphs" 由空行分隔:
perl -00 -pe 's/^(PIN ABC.*USE) \w+/ POWER/s' <<END
some stuff
PIN ABC
DIRECTION INPUT
USE SIGNAL
PIN DEF
USE SIGNAL
more stuff
END
some stuff
PIN ABC
DIRECTION INPUT
USE POWER
PIN DEF
USE SIGNAL
more stuff
这使用
- 选项
-00
阅读段落,而不是行
-p
遍历记录并在修改后隐式打印
-
s///
命令的 s
修饰符允许 .
匹配换行符
sed -n '1h;1!H;${x;/PIN ABC/ s/USE SIGNAL/USE POWER/g;p;}' YourFile
- 除非有要求,否则不要打印行
- 加载缓冲区中的文件(第一行覆盖,其他追加)
- 最后
- 如果找到 PIN ABC,更改 USE SIGNAL
- 打印结果
现在,您肯定是指很多不同的 PIN ABC(在几个相同的 ABC 或几个具有不同 ABC 的 PIN 之间不清楚),在这种情况下,这个脚本不适合,因为它会在第一次出现时更改每个使用信号
我有一个包含很多 PIN 的文件。情况如下图
PIN ABC
DIRECTION INPUT
USE SIGNAL
我想将其替换为
PIN ABC
DIRECTION INPUT
USE POWER
只有当文件中出现 PIN ABC 时,信号才会变为电源。是否可以用grep或awk来完成。
你可以使用这个awk
awk '/^PIN ABC/ {a=NR} a+2==NR {="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
如果PIN
和USE
之间的行数不固定:
awk '/^PIN/ {f=1} f && /^USE/ {="POWER";f=0} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
使用 awk
,在 PIN ABC
行之后重写以 USE
开头的行。最后的 1
打印(可能修改过的)行。
$ awk '/^PIN/{pin=} /^USE/&&(pin=="ABC"){="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
假设您的 "paragraphs" 由空行分隔:
perl -00 -pe 's/^(PIN ABC.*USE) \w+/ POWER/s' <<END
some stuff
PIN ABC
DIRECTION INPUT
USE SIGNAL
PIN DEF
USE SIGNAL
more stuff
END
some stuff
PIN ABC
DIRECTION INPUT
USE POWER
PIN DEF
USE SIGNAL
more stuff
这使用
- 选项
-00
阅读段落,而不是行 -p
遍历记录并在修改后隐式打印-
s///
命令的s
修饰符允许.
匹配换行符
sed -n '1h;1!H;${x;/PIN ABC/ s/USE SIGNAL/USE POWER/g;p;}' YourFile
- 除非有要求,否则不要打印行
- 加载缓冲区中的文件(第一行覆盖,其他追加)
- 最后
- 如果找到 PIN ABC,更改 USE SIGNAL
- 打印结果
现在,您肯定是指很多不同的 PIN ABC(在几个相同的 ABC 或几个具有不同 ABC 的 PIN 之间不清楚),在这种情况下,这个脚本不适合,因为它会在第一次出现时更改每个使用信号