删除一行中逗号之前的所有内容

2024-04-29

我有多个文件,其中包含以下行:

foo, 123456
bar, 654321
baz, 098765

我想删除每行逗号之前(包括)的所有内容。 输出将是:

123456
654321
098765

在另一个问题上看到类似的内容后,我尝试使用以下内容,但用户没有留下解释,所以我不确定如何处理通配符:

find . -name "*.csv" -type f | xargs sed -i -e '/*,/d'

感谢您提供的任何帮助。


方法一:如果始终是2nd你想要的列,你可以这样做awk-- 这个命令实际上是在空格而不是逗号上分割行,所以它得到你的第二列 -- 数字,但没有前导空格:

awk '{print $2}' < whatever.csv

方法二:或者得到一切逗号之后(包括空间):

sed -e 's/^.*,//g' < whatever.csv

方法三:如果你想找到所有的.csv文件并将所有这些文件的输出放在一起,您可以执行以下操作:

sed -e 's/^.*,//g' `find . -name '*.csv' -print`

方法四:或者就像你开始那样——find and xargs:

find . -name '*.csv' -type f -print | xargs sed -e 's/^.*,//'

方法5:使所有的.csv文件到 .txt文件,按上述方式处理后,就可以制作一个简短的shell脚本了。像这样:

创建脚本“bla.sh":

#!/bin/sh
for infile in `find . -name '*.csv' -print` ; do
        outfile=`echo $infile | sed -e 's/.csv/.txt/'`
        echo "$infile --> $outfile"

        sed -e 's/^.*,//g' < $infile > $outfile
done

输入以下命令使其可执行:

chmod 755 bla.sh

然后运行它:

./bla.sh

这将创建一个.txt输出文件,其中每个内容都在逗号后面.csv输入文件。

替代方法 5:或者如果您需要他们的名字.csv,脚本可以这样更新——这只会生成一个名为“的输出文件”文件-new.csv“对于每个名为“的输入文件file.csv":

#!/bin/sh
for infile in `find . -name '*.csv' -print` ; do
    outfile=`echo $infile | sed -e 's/.csv/-new.csv/'`
    echo "$infile --> $outfile"

    sed -e 's/^.*,//g' < $infile > $outfile
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除一行中逗号之前的所有内容 的相关文章

随机推荐