2017-07-14 20 views
0

我想一个共同的纯文本行添加到所有存在于相同的Unix directory.And我想添加这个上面一个特定的关键字出现在文件中的所有文件,并将其保存使用! 瓦特q如何添加一行在多个文件中UNIX

我曾尝试下面的脚本,但我能够加入一个特定的关键字上面只有一行或一个字,我需要添加上述这种

for i in *; 
do sed -i 's/KEYWORD/datatoinsert\nKEYWORD/' "$i"; 
done 

任何帮助多行表示赞赏,即使有人已经尝试过这在Python中,我想尝试一下。

+0

请出示的例子。我用你的方法插入了几行,它工作。 – klutt

+0

'为我在*; do sed -i's/KEYWORD/datat1 \ ndata2 \ data3 \ nKEYWORD /'“$ i”; done' – rahul

+0

算出运行上面的代码添加了多行 – rahul

回答

0

有没有需要循环,您可以添加 '纯文本' 行用简单的sed编辑,例如

$ sed -i '/keyword/s/^/plain text\n/' * 

示例文件

$ cat file1.txt 
word 
keyword 
rest 

示例使用/变更

$ sed -i '/keyword/s/^/plain text\n/' * 
$ cat file1.txt 
word 
plain text 
keyword 
rest 

在这里你可以打破sed命令

  • sed -i编辑到位文件

  • /keyword/找到包含keyword

  • s替换命令行,如s/find/replace/

  • ^匹配线

  • plain text\n的beginnng的替换文本

所以你基本上找到包含keyword的行的开始,并替换(插入)包含它自己的换行符的文本plain text\n

+0

我的代码替换关键字,然后添加要插入的文本,然后再添加KEYWORD 有没有一种方法,它不会删除KEYWORD,只会将行的位置递增到下一行 并输入新文本代替它 – rahul

+0

是的,那正是我以上所做的。除了我从不替换'keyword'外,我只需在's/find/replace /'之前找到包含'/关键字'的关键字**的开始**,然后插入'plaint文本\ n''作为**行首**的新行。无论“keyword”出现在哪行,这都可以工作。 (例如,它可以用于行“'关键字”'或行''这里有一些关键字'') –

0

使用bash和SED,关键字dog之前加入replacement内容:

$ cat test.sh 
#!/usr/bin/env bash 
replacement="cats\neverywhere" 
sed "s/dog/$replacement\ndog/g" "$1" 

例子:

$ cat f1 
one 
two 
dog 
three 

$ ./test.sh f1 
one 
two 
cats 
everywhere 
dog 
three 

$ cat f2 
dog 
so close 
no matter 
dog 
far 
dog 

$ ./test.sh f2 
cats 
everywhere 
dog 
so close 
no matter 
cats 
everywhere 
dog 
far 
cats 
everywhere 
dog 
+0

我的代码替换了关键字,然后添加要插入的文本然后再添加KEYWORD 有没有一种方法,它不会删除KEYWORD并只增加该行的位置到下一行 并输入新文本代替它 – rahul

+0

我不确定这是sed如何操作,但为什么程序很重要,因为最终结果是所需的? sed是否不符合您的性能要求? – npit

+0

在编辑结束时,我必须存储在其他文件中添加的确切配置,并记录报告,删除KEYWORD,并再次添加,这也添加到我不想要的日志中 – rahul

相关问题