如果文件以uuid开头,那么我希望删除文件夹中所有文件的第一行,因此我有一个工作的sed命令,如下所示:
$ sed -i '' '/^uuid/d' *
它可以很好地工作,并删除以uuid开头的所有行。
现在,我希望通过只删除以uuid开头的第一行脚本来改进脚本,因为有些文件有多个uuid:s,并且只有第一行中的一个应该被删除。现在,我改进了命令,如下所示:
$ sed -i '' '1{/^uuid/d;}' *
现在,这个命令也可以工作,但只适用于文件夹中的第一个文件,即使我运行了一个简单的(只需删除第一行)版本,如:
$ sed -i '' '1d' *
它仍然只影响第一个文件。
为什么会这样呢?
我在Mac上(因此,我已经了解了sed的BSD版本),我也尝试通过Brew,$ brew install gnu-sed --with-default-names安装gnu-sed版本,但没有运气。
我读过sed - 25删除文件中的行或模式的示例,从文件中删除/删除字符的示例和googled 删除文件中的第一行
更新1:,正如john1024在注释中提议的那样,我已经用-s选项进行了测试,但不确定如何使用它。
$ sed -s '1d' ./* sed: illegal option -- s
当我检查man sed时,我可以找到-s & --seperate选项,所以我必须在这里做一些错误的事情。
更新2:确定,进度. find . -iname '*.yml' -exec sed -i '' -e '1{/uuid/d;}' {} \;完成了任务,但是我收到了错误消息,上面写着sed: can't read : No such file or directory
感谢您的帮助和指导!
*法律厅
发布于 2017-12-10 05:30:03
sed -i '' '1{/^uuid/d;}' *将只修改第一个文件,因为行号是通过文件累计计算的,因此“第1行”只发生一次,这是第一个文件的第一行。要处理多个文件的第一行,需要每个文件运行一次sed。
您可以使用一个简单的for循环来做到这一点:
for f in *; do sed -i '' '1{/^uuid/d;}' "$f"; donehttps://stackoverflow.com/questions/47732684
复制相似问题