在文件的开头插入新行[复制]

问题描述 投票:5回答:2

这个问题已经在这里有一个答案:

这是任何方式找到像*.js的所有文件,并在文件的开头插入一些具体的线路?寻找类似:

find . -name '*.js' -exec sh -c '[insert this 'string'] "${0%.js}"' {} \;

regex bash command-line-interface
2个回答
6
投票

这里有一个方法添加一行到文件的开头:

sed -i '1s/^/line_to_be_added\n/' file

然后,你可以使用上面的代码与find实现自己的终极目标:

find . -type f -name '*.js' -exec sed -i '1s/^/line_to_be_added\n/' {} \;

注意:这个答案进行了测试,并与GNU sed工作。

编辑:上面的代码不会对一个.js文件是空的正常工作,因为sed以上命令的空文件没有按预期工作。一种解决方法,以这将是测试,如果该文件是空的,并且如果它是,添加经由echo所需的行,否则经由sed添加所需的线路。这一切都可以在(长)的一行来完成,如下所示:

find . -type f -name '*.js' -exec bash -c 'if [ ! -s "{}" ]; then echo "line_to_be_added" >> {}; else sed -i "1s/^/line_to_be_added\n/" {}; fi' \;

编辑2:由于用户萨尔基斯Arutiunian指出,我们需要添加''表达和\'$'\n,使这项工作正常在sed的MacOS之前。下面的例子

sed -i '' '1s/^/line_to_be_added\'$'\n/' filename.js

编辑3:这也适用,并且编辑将知道如何语法高亮它:

sed -i '' $'1s/^/line_to_be_added\\\n/' filename.js

3
投票

便携性:用sed的保留空间

如果你想与GNU都和BSD sed的作品便携的解决方案,使用以下方法来添加文字到第一线,然后通过不变通的其余部分:

sed '1 { x; s/^.*/foo/; G; }' example.txt

假设的语料库:

bar
baz

这将打印:

foo
bar
baz

您可以保存转型的脚本,然后使用查找或xargs的和sed的-i标志就地一旦您确定一切工作您预期的方式编辑。

警告

使用SED有一个主要的限制:如果该文件是空的,它不会工作,正如您所料。这不是东西,很可能从原来的问题,但如果这是一个可能性,那么你需要使用类似cat <(echo foo) example.txt | sponge example.txt编辑就地文件,或使用临时文件和连接它们之后移动它们。

注意:海绵是非标准。它可以在moreutils包中找到。

© www.soinside.com 2019 - 2024. All rights reserved.