削减命令换行

时间:2012-03-06 16:24:43

标签: bash cut

我有一个这样的文件:

one
two 
three 
four

我想在bash脚本中使用for循环来扫描文件行以获取行。以前我使用cut但是我无法给cut命令提供换行符分隔符,我该怎么办?

这样就不起作用了:

cut -d'\n' -f1

有什么建议吗?

8 个答案:

答案 0 :(得分:53)

我发现自己遇到了同样的问题,这对我有用:

cat file.cut | cut -d$'\n' -f1

或者:

cut -d$'\n' -f1 file.cut

答案 1 :(得分:13)

使用cat进行连接或显示。这里不需要它:

while read line ; do
    echo "$line"
done < file

答案 2 :(得分:3)

只需使用:

echo -n `cut ...`

这会抑制最后的\ n

答案 3 :(得分:1)

cat FILE|while read line; do # 'line' is the variable name
   echo "$line" # do something here
done

或(见评论):

while read line; do # 'line' is the variable name
   echo "$line" # do something here
done < FILE

答案 4 :(得分:1)

因此,已经提供了一些非常好(可能更好)的答案。但是看一下原始问题的措辞,想要使用BASH for-loop,我很惊讶没有人提到改变Field Separator IFS的解决方案。这是一个纯粹的bash解决方案,就像接受的读取行

一样
old_IFS=$IFS
IFS='\n'
for field in $(<filename)
do your_thing;
done
IFS=$old_IFS

答案 5 :(得分:0)

如果您确定输出将始终以换行符分隔,请使用head -n 1代替cut -f1(请注意,您在脚本中提到了for循环,而您的问题最终不是脚本-相关)。

许多其他答案(包括已接受的答案)不必要地包含多行。无需跨多行执行此操作,也无需更改系统上的默认定界符。

此外,Ivan用-d$'\n'提供的解决方案在Mac OSX或CentOS 7上都不适合我。由于他的回答已有4年之久,所以我认为{{ 1}}字符。

答案 6 :(得分:0)

令人惊讶的是,在那 9 年的搜索中,没有人提出另一种方法。我怀疑我在撰写本文时看到的其他答案会更慢。

你可以这样做

some_output | sed 's/\\n/ /g' | cut -d ' ' -f 1

答案 7 :(得分:-2)

我的观点是“cut”使用'\ n'作为默认分隔符。 如果你想使用cut,我有两种方法:

    cut -d^M -f1 file_cut

我制作^ M按Ctrl + V后单击Enter。另一种方式是

    cut -c 1- file_cut

这有帮助吗?