我有一个 sed
问题,但在任何地方都找不到答案:
我有一堆文件,其中一些以字符串 ###
开头,有些则不然。在每个以 ###
开头的文件中,我想在当前第一行之前插入一些多行字符串。
f.e.如果文件看起来像
### the first line
abc cba jfkdslfjslkd
我希望将多行字符串插入到顶部
my
multi
line
string
### the first line
abc cba jfkdslfjslkd
文件中的任何其他内容都不应被修改。
如果文件不是以 ###
开头,那么我不想编辑它。
最佳答案
使用 sed
首先让我们定义您的字符串:
$ 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
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
关于linux - 如果第一行与模式匹配,sed 在文件的第一行插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55778736/