在使用sed第一次匹配后插入行
出于某种原因,我似乎无法find一个简单的答案,我现在正处于一个紧张的时刻。 如何在使用sed
命令匹配特定string的第一行之后插入文本的select行。 我有 …
CLIENTSCRIPT="foo" CLIENTFILE="bar"
我想在CLIENTSCRIPT=
行之后插入一行,导致…
CLIENTSCRIPT="foo" CLIENTSCRIPT2="hello" CLIENTFILE="bar"
尝试这样做:
sed '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
如果你想在原地替代 ,使用
sed -i '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
产量
CLIENTSCRIPT="foo" CLIENTSCRIPT2="hello" CLIENTFILE="bar"
文件
- 请参阅sed文档和search
\a
(追加)
请注意标准的sed
语法(如在POSIX中一样,所有符合sed
实现(GNU,OS / X,BSD,Solaris …)的支持):
sed '/CLIENTSCRIPT=/a\ CLIENTSCRIPT2="hello"' file
用于就地编辑的-i
选项也是一个GNU扩展,其他一些实现(如FreeBSD的)支持-i ''
。
或者,为了便于携带,您可以使用perl
来代替:
perl -pi -e '$_ .= qq(CLIENTSCRIPT2="hello"\n) if /CLIENTSCRIPT=/' file
或者你可以使用ed
或ex
:
printf '%s\n' /CLIENTSCRIPT=/a 'CLIENTSCRIPT2="hello"' . wq | ex -s file
符合POSIX的单线程:
sed '/CLIENTSCRIPT="foo"/s/.*/&\nCLIENTSCRIPT2="hello"/' file
我最近不得不处理这个问题,但不仅仅是为了一个文件,而是多个不同的文件,我不能手工完成。 所以我必须find一个脚本。
脚本下载: kinglazy-autoinsert.sh
用法:
kinglazy-autoinsert.sh(list_file)(pattern_file)
参数说明:
list_file =这是包含要编辑的文件列表的绝对path的文件
pattern_file =这是指定要在其下添加新文本的模式(在第一列中)的文件。 在模式下添加的新文本在第二列中指定。 就是这个!
这个脚本节省了时间,并帮助您尽可能以最小的努力完成工作。
依赖关系:无
我有一个类似的任务,并没有得到上面的Perl解决scheme的工作。
这是我的解决scheme:
perl -i -pe "BEGIN{undef $/;} s/^\[mysqld\]$/[mysqld]\n\ncollation-server = utf8_unicode_ci\n/sgm" /etc/mysql/my.cnf
说明:
使用正则expression式在我的/etc/mysql/my.cnf文件中search仅包含[mysqld]
,并将其replace为
[mysqld] collation-server = utf8_unicode_ci
在包含[mysqld]
行之后有效地添加collation-server = utf8_unicode_ci
行。