sed 从文件中删除第一行
Sed delete first line from files
如果文件以 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 examples to delete a line or pattern in a file,
sed - 20 examples to remove / delete characters from a file and googled sed delete first line in files
更新 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
感谢您的帮助或指导!
:奥拉
sed -i '' '1{/^uuid/d;}' *
将只修改第一个文件,
因为行号是跨文件累计计算的,
所以 "line 1" 只出现一次,它是第一个文件的第一行。
要对多个文件的第一行做一些事情,
每个文件需要 运行 sed
一次。
您可以使用一个简单的 for
循环来做到这一点:
for f in *; do sed -i '' '1{/^uuid/d;}' "$f"; done
如果文件以 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 examples to delete a line or pattern in a file, sed - 20 examples to remove / delete characters from a file and googled sed delete first line in files
更新 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
感谢您的帮助或指导!
:奥拉
sed -i '' '1{/^uuid/d;}' *
将只修改第一个文件,
因为行号是跨文件累计计算的,
所以 "line 1" 只出现一次,它是第一个文件的第一行。
要对多个文件的第一行做一些事情,
每个文件需要 运行 sed
一次。
您可以使用一个简单的 for
循环来做到这一点:
for f in *; do sed -i '' '1{/^uuid/d;}' "$f"; done