在文件的开头插入一个新行

时间:2017-05-14 23:26:48

标签: regex bash command-line-interface

是否可以找到class Button extends Component { constructor(props) { super(props); } render() { return ( <TouchableOpacity onPress={this.props.onPress} style={styles.cardButtonWrap}> <Text style={styles.cardButton}>Button</Text> </TouchableOpacity> ); } } 之类的所有文件并在文件开头插入一些特定的行?寻找类似的东西:

*.js

2 个答案:

答案 0 :(得分:5)

这是一种在文件开头添加一行的方法:

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 :正如用户Sarkis Arutiunian指出的那样,我们需要在表达式之前添加'',在\'$'之前添加\n以使其正常工作MacOS sed。这是一个例子

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

答案 1 :(得分:2)

便携性:使用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包中找到。