2012-03-06 100 views
14

我有一个这样的文件:剪切命令换行符

one 
two 
three 
four 

我想利用在bash脚本循环,以扫描行的文件行。以前我使用cut,但我无法给cut命令提供新行分隔符,我该怎么办?

这样它不工作:

cut -d'\n' -f1 

什么建议吗?

回答

11

使用cat为串联或显示。这里不需要它:

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

我同意这一点,但这比“cut”方法慢得多。 – 2018-01-11 06:15:02

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 
+2

[UUOC(http://en.wikipedia.org/wiki/Cat_%28Unix%29#Useless_use_of_cat) - 使用'而做... Kevin 2012-03-06 16:28:37

+0

这不是无用的,这可能是浪费(阅读本段后),但它也更易读IMO。 – 0xC0000022L 2012-03-06 16:34:13

-1

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

cut -d^M -f1 file_cut 

我使^ M通过点击输入Ctrl + V之后。另一种方法是

cut -c 1- file_cut 

这有帮助吗?

+0

不幸的是,以上都没有为我工作(bash,版本4.2.45)。 – 2013-06-16 17:53:53

39

我发现自己同样的问题,这个工作对我来说:

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

或者:

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

这对我来说很好:)谢谢 – Sina 2015-09-05 10:08:50

3

只需使用:

echo -n `cut ...` 

这抑制了\ n在end

1

因此,索姆已经提供了很好的答案(可能更好)。但是看到原始问题的表述,想要使用BASH for循环,让我感到惊讶的是,没有人提到Field分离器IFS改变的解决方案。这是一个纯bash的解决方案,就像接受读线

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