在 cygwin 中重定向‘for’循环的输出

在 cygwin 中重定向‘for’循环的输出

我有一个包含 3 个文件的目录:a.txt b.txt c.txt 我必须从每个文件中删除前 4 行 我想在 Cygwin 中使用“sed”或“awk”等 我这样做:

for x in `ls`; do
    sed '1,4d' $x
done

它工作正常,但我需要将输出放在新创建的文件中,例如 a2.txt b2.txt c2.txt。我该如何重构我的循环?谢谢

答案1

假设您在 Cygwin 中使用 bash 作为您的 shell(这是默认设置),您可以按如下方式使用 bash 参数扩展功能:

for x in *.txt; do
    sed '1,4d' $x > ${x%.txt}2.txt
done

关键是${x%.txt} 删除文件名后缀(.txt),然后附加“2”和“.txt”作为示例。

还有其他重构:使用“ ls”来获取需要编辑的文件列表是多余的,使用 shell 本身的路径名扩展就足够了。

答案2

for x in *; do
    sed '1,4d' $x > $(basename $x .txt)2.txt
done

或者

for x in *; do
    sed '1,4d' $x > ${x/./2.}
done

相关内容