我有一个分为几节的文本文件。每个节以 [keyword] 开头,以空行结束。像这样的东西:
[keyword1]
param1 = value1
param2 = value2
param3 = value3
[keyword2]
param4 = value4
param5 = value5
...
我需要一个脚本(可能单行命令就可以)在给定的[keyword]
.要插入的行类似于上面的几行:
param = value
我正在考虑使用sed
就地编辑加上备份副本文件以防万一。
答案1
是的,sed
听起来是正确的选择:
sed -i.bak '/^\[keyword1\]/aparam = value\nparam = other' your.file
awk
可以做到,除了就地编辑部分:
awk '1;/^\[keyword1\]/{print"param = value";print"param = other"}' your.file > new.file
如果您不介意使用大枪perl
来完成这样的小任务:
perl -i.bak -pe '$_.="param = value\nparam = other\n"if/^\[keyword1\]/' your.file
后一个将ruby
在 1 个字符修改后工作:
ruby -i.bak -pe '$_+="param = value\nparam = other\n"if/^\[keyword1\]/' your.file
python
解决方案有点冗长(可能因我的知识薄弱而恶化):
python -c 'import sys,fileinput;[sys.stdout.write(line+("param = value\nparam = other\n" if line=="[keyword1]\n" else "")) for line in fileinput.input(inplace=1,backup=".bak")]' your.file
再次没有就地编辑,但bash
也ksh
可以这样做:
while IFS='' read -r line; do
echo "$line"
[[ "$line" == '[keyword1]' ]] && {
echo "param = value"
echo "param = other"
}
done < your.file > new.file
就地ed
编辑很简单,但我不知道如何创建备份:
ed -s your.file <<< $'/^\[keyword1\]/a\nparam = value\nparam = other\n.\nwq'
答案2
如果您用作编辑器,您可以按如下方式vim
在您的中设置缩写:.vimrc
:abbr key1 [keyword1]^M^Iparam1 = value1^M^Iparam2 = value2^M^Iparam3 = value3^M
:abbr key2 [keyword2]^M^Iparam4 = value4^M^Iparam5 = value5^M
现在,在任何文件中,在插入模式下,如果您键入key1
,然后按enter,您将看到:
[keyword1]
param1 = value1
param2 = value2
param3 = value3
如果这是您经常重复做的事情,vim
缩写可以减轻痛苦。