我有一个文本文件,其中有一行
sometext sometext sometext TEXT_TO_BE_REPLACED sometext sometext sometext
我需要将上面的整行替换为
This line is removed by the admin.
搜索关键字是text_to_be_replace
我需要为此写一个shell脚本。如何使用sed实现这一点?
我有一个文本文件,其中有一行
sometext sometext sometext TEXT_TO_BE_REPLACED sometext sometext sometext
我需要将上面的整行替换为
This line is removed by the admin.
搜索关键字是text_to_be_replace
我需要为此写一个shell脚本。如何使用sed实现这一点?
当前回答
这和上面那个很相似。
sed 's/[A-Za-z0-9]*TEXT_TO_BE_REPLACED.[A-Za-z0-9]*/This line is removed by the admin./'
其他回答
这和上面那个很相似。
sed 's/[A-Za-z0-9]*TEXT_TO_BE_REPLACED.[A-Za-z0-9]*/This line is removed by the admin./'
将包含指定字符串的整行替换为该行的内容
文本文件:
Row: 0 last_time_contacted=0, display_name=Mozart, _id=100, phonebook_bucket_alt=2
Row: 1 last_time_contacted=0, display_name=Bach, _id=101, phonebook_bucket_alt=2
单一的字符串:
$ sed 's/.* display_name=\([[:alpha:]]\+\).*/\1/'
output:
100
101
由空格分隔的多个字符串:
$ sed 's/.* display_name=\([[:alpha:]]\+\).* _id=\([[:digit:]]\+\).*/\1 \2/'
output:
Mozart 100
Bach 101
调整regex以满足您的需要
[:alpha]和[:digit:] 字符类和括号表达式
在我的makefile中,我使用这个:
@sed -i '/.*Revision:.*/c\'"`svn info -R main.cpp | awk '/^Rev/'`"'' README.md
PS:不要忘记-i实际上改变了文件中的文本…因此,如果你定义为“Revision”的模式将改变,你也将改变模式来替换。
示例输出:
abc项目由John Doe撰写 修改:1190
因此,如果你设置模式“Revision: 1190”,这显然与你将它们定义为“Revision:”不同……
以上答案:
sed -i '/TEXT_TO_BE_REPLACED/c\This line is removed by the admin.' /tmp/foo
如果替换字符串/行不是变量,工作正常。
问题是在Redhat 5上,c后面的\转义了$。双\\也不起作用(至少在红帽5上)。
通过hit和trial,我发现如果替换字符串/行只有一行,那么c后面的\是多余的。所以我没有在c后面使用\,使用一个变量作为单一的替换行,它是joy。
代码看起来像这样:
sed -i "/TEXT_TO_BE_REPLACED/c $REPLACEMENT_TEXT_STRING" /tmp/foo
注意使用双引号而不是单引号。
cat find_replace | while read pattern replacement ; do
sed -i "/${pattern}/c ${replacement}" file
done
Find_replace文件包含2列,c1为匹配模式,c2为替换,sed循环替换包含变量1的模式之一的每一行