我有一个有很多PIN的文件。情况如下所示
PIN ABC
DIRECTION INPUT
USE SIGNAL
我想用
替换它PIN ABC
DIRECTION INPUT
USE POWER
只有在文件中出现PIN ABC时才会将信号更改为电源。是否可以使用grep或awk来实现。
答案 0 :(得分:2)
您可以使用此awk
awk '/^PIN ABC/ {a=NR} a+2==NR {$2="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
如果PIN
和USE
之间的行数未修复:
awk '/^PIN/ {f=1} f && /^USE/ {$2="POWER";f=0} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
答案 1 :(得分:2)
假设您的“段落”用空行分隔:
perl -00 -pe 's/^(PIN ABC.*USE) \w+/$1 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///
修饰符,以允许.
匹配换行符答案 2 :(得分:1)
使用awk
,在USE
行之后重写以PIN ABC
开头的行。最后的1
打印(可能已修改)行。
$ awk '/^PIN/{pin=$2} /^USE/&&(pin=="ABC"){$2="POWER"} 1' file
PIN ABC
DIRECTION INPUT
USE POWER
答案 3 :(得分:0)
sed -n '1h;1!H;${x;/PIN ABC/ s/USE SIGNAL/USE POWER/g;p;}' YourFile
现在,你肯定意味着很多不同的PIN ABC(在几个相同的ABC或几个不同ABC的PIN之间不清楚),在这种情况下,这个脚本不适合,因为它在第一次出现时改变了每个使用信号