擦除使用sed
回答
有多種方法可以做到這一點。如果你想在每一行刪除了一切,一個括號後,只需使用:
sed -i 's/).*/)/' file.txt
什麼上面確實是「一個括號後匹配的一切,只是一個括號更換整場比賽。」
這就是說,最簡單的工具通常是正確的。 cut
提供了一種非常簡單的方法,根據您傳遞給它的delimiter
將行「切分」爲塊。例如:
cut -d" " -f -3 file.txt
現在,如果你的文件是一個有點不同,第三列不一定有一個括號結束,您可以使用awk
代替。 Awk提供了更多的控制,並且比cut
更精細。
例如:
awk -F' ' '{ print $1, $2, $3 }' file.txt
什麼上面所做的是分開的每一行,使用具有-F
傳遞作爲字段分隔符的字符。然後,它會打印三個第一個字段,並使用相同的字段分隔符(OFS
)分隔它們。
'print $ 1,$ 2,$ 3'是相同的,但比'print $ 1 OFS $ 2 OFS $ 3'更優雅, – 2012-03-02 18:00:19
@glennjackman謝謝Glenn,我沒有意識到這一點。我會編輯我的答案以反映它。 – teotwaki 2012-03-02 20:53:50
awk
是工具處理表格數據很好:
$ awk -v n=4 '{for(i=n;i<=NF;i++)$i=""}1' file.txt
cut
是另一個工具(有時候,你需要cut
之前tr
擠壓的空格):
$ cat file.txt | tr -s ' ' | cut -d ' ' -f 1-3
你可以嘗試,而不是削減:
cut -d " " -f -3 FILENAME
是的,你可以使用SED:
sed 's/^\([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*\).*/\1/' file.txt > newfile.txt
添加「-i」開關後,sed和(在bash),該文件將就地編輯(即輸入和輸出是一樣的)。在測試時首先進行備份。
某些版本的sed將允許您使用擴展的正則表達式,使語法更友好。使用「-r」開關:
sed -r 's/^([^ ]+ [^ ]+ [^ ]+).*/\1/' file.txt > newfile.txt
[^ ]
表示除空格以外的所有字符。 [^ ]*
意味着零個或多個任意字符,除了空間 [^ ]+
意味着一個或多個任意字符,除了空間 \1
意味着第一個括號表達 當然代替,你總是可以使用,而不是削減:-):
cut -f-3 -d" " file.txt > newfile.txt
這必須是迄今爲止我見過的最醜陋的sed代碼... o_O – Morlock 2012-03-02 17:56:28
@Glenn - 好。我已更正了代碼。我無法測試它。它可能很難看,但它回答了這個問題。我幾乎肯定會在我的代碼中使用cut。 – groovyspaceman 2012-03-02 18:06:03
這可能會爲你工作:
echo "a20 is (on) Jan 15" | sed 's/\(\s*\S*\)\{2\}$//'
a20 is (on)
向後工作有時是容易,或轉發:
echo "a20 is (on) Jan 15" | sed 's/\(\S*\(\s*\S*\)\{2\}\).*/\1/'
a20 is (on)
沒有人提到perl的方式(其相對於sed的-i,在不使用GNU平臺工作SED):perl -p -i -e 's/(on).*/(on)/' filename
- 1. 使用sed從文件開始擦除到給定的參數
- 2. 如何使用remove_if擦除
- 3. 使用Python擦除文件中的行數擦除文件
- 4. 使用std :: vector ::使用const_iterators擦除
- 5. 是否用'd'擦除保留空間來刪除sed模式空間?
- 6. 擦除或擦除LDAP記錄:如何?
- 7. 使用sed刪除cruft行
- 8. 使用SED刪除文本
- 9. 刪除字符使用sed
- 10. 使用sed刪除多行
- 11. C++ std :: set ::使用std :: remove_if擦除::
- 12. 如何使用std :: reverse_iterator擦除*和CONTINUE *?
- 13. 在Java中使用類型擦除
- 14. 使用AS3執行擦除算法
- 15. std :: vector ::使用相同參數擦除
- 16. 使用UIBezierPath擦除繪製線條
- 17. 使Android應用程式非可擦除
- 18. 使用CGContext繪圖後擦除
- 19. 使用.Net GDI +擦除像素+
- 20. C++ 11:擦除使用常量性
- 21. wxpython使用DC後擦除背景
- 22. 使用Win2D擦除蒙版圖像
- 23. 使用光標的Javascript擦除圖像
- 24. 如何使用光標擦除畫布
- 25. 如何使用sketch.min.js擦除點擊擦除按鈕上的畫布?
- 26. 奇怪擦除
- 27. flash.display.Graphics擦除
- 28. 擦除價值
- 29. 擦除值
- 30. 擦除元素
你想這一個後刪除所有行?用*文本縮短所有行*或者縮短所有行? – 2012-03-02 18:07:08