我有一个文本文件,我想在文本中间插入更多文本。 我有这个输入文字:
[etc....]
relay_recipient_maps =
btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador
[etc...]
在最后一行之后,我想在“黑暗的霸王线”之后插入阿纳金,但我不知道如何解决我的问题。
答案 0 :(得分:1)
这是使用GNU sed
的一种方式。像:
sed -f script.sed file.txt
script.sed
的内容:
/relay_recipient_maps =/,/[^,]$/ {
/relay_recipient_maps =/ n
/[^,]$/ {
s/[ \t]*$/,/
a\ btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
}
}
或:
/relay_recipient_maps =/,/[^,]$/ {
/btree.*[^,]$/ {
s/[ \t]*$/,/
a\ btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
}
}
结果:
[etc....]
relay_recipient_maps =
btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador,
btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
[etc...]
答案 1 :(得分:0)
取决于您使用的是什么外壳。 你可以在bash,zsh和其他一些人中做到这一点:
echo "the dark vador line" >> file_with_content.txt
这会将字符串附加到文件的末尾。
答案 2 :(得分:0)
您可以使用sed:
sed -e '/dark_vador/ s/$/Anakin/' file.txt
对于包含模式dark_vador
的每一行,字符串Anakin
将附加到该行的末尾。
如果您只想在第一场比赛中执行此操作,则可以在追加后退出:
sed -e '/dark_vador/ { s/$/Anakin/; q }' file.txt
必须将s
和q
命令组合在一起,这样它们才会在dark_vador
行上执行,否则q
会在第一行读取后退出(甚至如果它不包含dark_vador
)。
如果您想在dark_vador
行之后追加行,则可以使用a
命令:
sed -e '/dark_vador/ a\
Anakin' file.txt
这会在Anakin
的每一行之后用dark_vador
创建一个新行。如上所述,如果您只想在第一次匹配后添加一行,则可以退出:
sed -e '/dark_vador/ { a\
Anakin
q }' file.txt
希望这有助于=)
答案 3 :(得分:0)
这是一个GNU sed替代方案:
sed '/^relay_recipient_maps/,/[^,]$/{/btree:.*[^,]$/s##&,\n btree:/opt/pmx69/postfix/etc/vdm_valid_users_Anakin#}' file.txt
工作原理:
对于以“relay_recipient_maps”开头的块,以及所有后续行直到以逗号结尾的行,然后替换不以逗号结尾的“btree:”行(这将是“relay_recipient_maps”块中的最后一个btree)用同一行加上“,”和所需的新行。
这假设“relay_recipient_maps”块总是以btree结尾:不以“,”结尾的行