这man
页没有给我太多希望,但我希望它是一个未记录的(和/或 GNU 特定的)功能。
答案1
答案2
你不能。要么使用 ed 或 GNU sed 或 perl,要么做它们在幕后所做的事情,即为内容创建一个新文件。
ed
, 便携的:
ed foo <<EOF
1,$s/^\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/
w
q
EOF
GNU sed
:
sed -i -e 's/^\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/' foo
珀尔:
perl -i -l -F, -pae 'print @F[1,3]' foo
cut
,创建一个新文件(推荐,因为如果你的脚本被中断,你可以再次运行它):
cut -d , -f 1,3 <foo >foo.new &&
mv -f foo.new foo
cut
,就地替换文件(保留 的所有权和权限foo
,但需要防止中断):
cp -f foo foo.old &&
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
我建议使用基于 - 的方法之一cut
。这样您就不需要依赖任何非标准工具,您可以使用适合工作的最佳工具,并且可以控制中断时的行为。
答案3
我认为单独使用是不可能的cut
。我在手册或信息页面中找不到它。你可以做一些事情,比如
mytemp=$(mktemp) && cut -d" " -f1 file > $mytemp && mv $mytemp file
mktemp
使您成为一个相对安全的临时文件,您可以将cut
输出通过管道传输到其中。