尝试匹配和修改 awk 或 sed 中的部分行
Trying to match and modify part of a line in awk or sed
我尝试了几个语法 (sed/awk) 在特定行的末尾添加一个后缀,在“{”之前包含“ltm virtual /Common/”(它是一个 bigip 平台 > bigip.conf ) 但我不是专家使用它..
我在文件中得到了这些行:
ltm virtual /Common/VS_exemple_80 {
ltm virtual /Common/VS_exemple_443 {
ltm virtual /Common/VS_test_80 {
ltm virtual /Common/VS_test_443 {
我确实需要在最后添加 XX,像这样:
ltm virtual /Common/VS_exemple_80_XX {
ltm virtual /Common/VS_exemple_443_XX {
ltm virtual /Common/VS_test_80_XX {
ltm virtual /Common/VS_test_443_XX {
请注意,我需要执行此更改的所有行都以:
开头
ltm virtual /Common/VS_XXXXX
我试图做的是找到“ltm virtual”行,运行 从 VS_ 到行“{”的末尾并附加“_XX”
谢谢大家..
我试过了:
sed -i '/^ltm virtual/s/[^ ]*$/&_XX/' bigip.conf.bkp
我可以匹配正确的行,但后缀附加在行尾..
ltm virtual /Common/VS_test_80 {_XX
您正在匹配整行,然后在末尾添加 _XX
。您只需要将行的一部分匹配到 {
.
sed -r 's/^ltm virtual \/Common\/VS_\w+/&_XX/'
请注意 \w+
(一个或多个单词字符)需要扩展正则表达式,因为您需要 -r
.
正则表达式末尾的 $
将其锚定到行尾,因此使其与输入中的任何字符串都不匹配,而且您正在尝试使用 /
s 在由 /
s 分隔的正则表达式中,你不能这样做 - 当试图匹配 sed 中的正则表达式 a/b
时,你必须转义 [=12] 而不是 /a/b/
=] 像 /a\/b/
或更简洁地使用不同的分隔符,例如:a/b:
.
使用任何 sed:
$ sed 's:ltm virtual /Common/[^ ]*:&_XX:' file
ltm virtual /Common/VS_exemple_80_XX {
ltm virtual /Common/VS_exemple_443_XX {
ltm virtual /Common/VS_test_80_XX {
ltm virtual /Common/VS_test_443_XX {
我尝试了几个语法 (sed/awk) 在特定行的末尾添加一个后缀,在“{”之前包含“ltm virtual /Common/”(它是一个 bigip 平台 > bigip.conf ) 但我不是专家使用它..
我在文件中得到了这些行:
ltm virtual /Common/VS_exemple_80 {
ltm virtual /Common/VS_exemple_443 {
ltm virtual /Common/VS_test_80 {
ltm virtual /Common/VS_test_443 {
我确实需要在最后添加 XX,像这样:
ltm virtual /Common/VS_exemple_80_XX {
ltm virtual /Common/VS_exemple_443_XX {
ltm virtual /Common/VS_test_80_XX {
ltm virtual /Common/VS_test_443_XX {
请注意,我需要执行此更改的所有行都以:
开头ltm virtual /Common/VS_XXXXX
我试图做的是找到“ltm virtual”行,运行 从 VS_ 到行“{”的末尾并附加“_XX”
谢谢大家..
我试过了:
sed -i '/^ltm virtual/s/[^ ]*$/&_XX/' bigip.conf.bkp
我可以匹配正确的行,但后缀附加在行尾..
ltm virtual /Common/VS_test_80 {_XX
您正在匹配整行,然后在末尾添加 _XX
。您只需要将行的一部分匹配到 {
.
sed -r 's/^ltm virtual \/Common\/VS_\w+/&_XX/'
请注意 \w+
(一个或多个单词字符)需要扩展正则表达式,因为您需要 -r
.
正则表达式末尾的 $
将其锚定到行尾,因此使其与输入中的任何字符串都不匹配,而且您正在尝试使用 /
s 在由 /
s 分隔的正则表达式中,你不能这样做 - 当试图匹配 sed 中的正则表达式 a/b
时,你必须转义 [=12] 而不是 /a/b/
=] 像 /a\/b/
或更简洁地使用不同的分隔符,例如:a/b:
.
使用任何 sed:
$ sed 's:ltm virtual /Common/[^ ]*:&_XX:' file
ltm virtual /Common/VS_exemple_80_XX {
ltm virtual /Common/VS_exemple_443_XX {
ltm virtual /Common/VS_test_80_XX {
ltm virtual /Common/VS_test_443_XX {