我有一个sed
问题,至今找不到答案:
我有一堆文件,其中有些以字符串###
开头,有些则没有。在每个以###
开头的文件中,我想在当前第一行之前插入一些多行字符串。
f.e。如果文件看起来像
### the first line
abc cba jfkdslfjslkd
我希望多行字符串插入顶部
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
文件中的其他所有内容均不得修改。
如果文件不是以###
开头,那么我不想编辑它。
答案 0 :(得分:1)
首先让我们定义您的字符串:
$ s='my\nmulti\nline\nstring\n\n'
现在,让我们运行sed命令:
$ sed "1s/^###/$s&/" File
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
工作原理:
1s/old/new/
用new
代替old
,但是如果第一行上出现old
,则仅 。
1s/^###/$s&/
开头,则 $s
替换###
前面的字符串###
。
警告::字符串s
不应包含任何激活sed的字符。如果字符串s
不受您控制,则表示存在安全冲突。
Awk对变量进行了明智的处理,从而避免了安全性问题。
$ s='my\nmulti\nline\nstring\n'
$ awk -v string="$s" 'NR==1 && /^###/ {print string} 1' File
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
答案 1 :(得分:0)
这可能是sed中更简单的解决方案:
输入:
▶ string='my\nmulti\nline\nstring\n'
▶ cat FILE
### the first line
abc cba jfkdslfjslkd
### other lines
解决方案:
▶ gsed -e '1{/^###/i\' -e "$string" -e '}' FILE
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
### other lines"
说明:
-e
可以避免在sed命令中插入字符串。i\
命令的GNU替代形式。答案 2 :(得分:0)
尝试使用gnu sed和bash
if (Found)