我有一個格式化的進程列表(頂部輸出),我想刪除不必要的信息。我如何刪除例如每行的第二個單詞+空格。如何刪除top(1)輸出每行的第二個單詞?
實施例:
1 a hello
2 b hi
3 c ahoi
Id喜歡刪除b和c。
我有一個格式化的進程列表(頂部輸出),我想刪除不必要的信息。我如何刪除例如每行的第二個單詞+空格。如何刪除top(1)輸出每行的第二個單詞?
實施例:
1 a hello
2 b hi
3 c ahoi
Id喜歡刪除b和c。
您可以使用cut
命令。
cut -d' ' -f2 --complement file
--complement
是相反的。即與-f2
第二場被選中。與--complement
如果打印除第二個以外的所有字段。當你有可變數量的字段時,這很有用。
GNU的切割有選項--complement
。在情況下,--complement
不可用的話,下面的做同樣的:
切-d」'-f1,3-文件
含義:打印第一場,然後打印從第三到結束,即不包含第二字段並打印剩下的部分。 編輯:
如果你喜歡awk
你可以這樣做:awk {$2=""; print $0}' file
這臺第二清空並打印整行(一個接一個)。使用sed
好的解決方案+1。 –
'awk'{$ 2 =「」; print}'file'會留下額外的空間。 –
@sudo_O沒錯。我猜只要字段被空格分開,這對於字段用於任何目的都是可以的。 –
使用sed
替代第二列:
sed -r 's/(\w+\s+)\w+\s+(.*)/\1\2/' file
1 hello
2 hi
3 ahoi
說明:
(\w+\s+) # Capture the first word and trailing whitespace
\w+\s+ # Match the second word and trailing whitespace
(.*) # Capture everything else on the line
\1\2 # Replace with the captured groups
注:使用-i
選項保存結果反饋給file
,-r
是擴展的正則表達式,檢查man
,因爲它可能是-E
取決於實施。
或者使用awk
僅打印指定的列:
$ awk '{print $1, $3}' file
1 hello
2 hi
3 ahoi
這兩種解決方案都存在優點,該awk
解決方案是一個小的固定數列的不錯,但你需要使用一個臨時文件來存儲更改awk '{print $1, $3}' file > tmp; mv tmp file
其中sed
解決方案更靈活,因爲列不是問題,並且-i
選項執行了編輯。
很好的解釋,awk似乎是更容易使用的人。 –
我最初以爲awk。但是,對於可變數量的字段,可能需要使用「NF」循環。已經爲此+1了:) –
@KingsIndian我已經爲兩者的優點添加了一些額外的信息。 –
方式一:
sed 's/ [^ ]*//' file
結果:
1 hello
2 hi
3 ahoi
這一個很好,但我認爲sed比例如慢。 awk –
使用bash:
$ while read f1 f2 f3
> do
> echo $f1 $f3
> done < file
1 hello
2 hi
3 ahoi
手指越過你的文件不包含+,?,*或任何其他shell匹配的字符,或者如果它沒有,你的目錄中沒有任何匹配模式的文件。除非你有充分的理由,否則一定要引用你的變量。手指也劃過你的文件不包含任何反斜槓。除非你有很好的理由,否則總是把你的循環寫成'while IFS = read -r line'。最後 - 編寫shell循環很少是正確的答案。 –
這可能會爲你工作(GNU SED):
sed -r 's/\S+\s+//2' file
+1教我,你可以指定'sed'中發生了什麼 –
使用'ps'並使用'--format'自定義輸出 – artbristol
這也是可行的,謝謝 –
事實上,減少頂級輸出而不是使用ps似乎是一種愚蠢的現在 –