我有多个文件,如:
foo, 123456
bar, 654321
baz, 098765
我想在逗号之前(包括)删除每行上的所有内容。 输出将是:
123456
654321
098765
我在另一个问题上看到类似内容之后尝试使用以下内容,但是用户没有留下解释,所以我不确定如何处理通配符:
find . -name "*.csv" -type f | xargs sed -i -e '/*,/d'
感谢您提供任何帮助。
答案 0 :(得分:3)
方法1: 如果它始终是您想要的 2nd 列,则可以使用 awk 执行此操作 - 此命令实际上是拆分空白行而不是逗号,所以它得到你的第二列 - 数字,但没有前导空格:
awk '{print $2}' < whatever.csv
方法2: 或者在逗号之后获取所有(包括空格):
sed -e 's/^.*,//g' < whatever.csv
方法3: 如果您想查找所有 .csv 文件并将所有这些文件的输出结合在一起,您可以执行以下操作:
sed -e 's/^.*,//g' `find . -name '*.csv' -print`
方法4: 或者以与开始相同的方式 - 使用查找和 xargs :
find . -name '*.csv' -type f -print | xargs sed -e 's/^.*,//'
方法5: 将所有 .csv 文件制作成。 txt 文件,按上述方式处理,您可以制作简短的shell脚本。像这样:
创建一个脚本&#34; bla.sh &#34;:
#!/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 ,则可以像这样更新脚本 - 这只会生成名为&#34的输出文件; file-new.csv &#34;对于名为&#34; file.csv &#34;:
的每个输入文件#!/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
答案 1 :(得分:1)
这样的东西应该适用于单个文件。让我们说吧 输入是'yourfile',你希望输出转到'outfile'。
sed 's/^.*,//' < yourfile > outfile
执行搜索和替换的语法是s/input_pattern/replacement/
^
将输入模式锚定到行的开头。
点.
匹配任何单个字符; .*
匹配任何字符的零或多个字符串。
,
与逗号匹配。
替换模式为空,因此与input_pattern匹配 将被删除。