2012-03-06 144 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