次の行を含むテキストファイルがあります。
[...]
GFX Clocks and Power:
800 MHz (MCLK)
26 MHz (SCLK)
[...]
一部(値が一定ではない)を抽出したいので、削除して使用したいと800 MHz
思います。\t
(MCLK)
sed
これは私の現在のコマンドです。
$ cat ~/test.txt | grep "(MCLK)" | xargs -0 sed -i -e $'s/\t//g' -e 's/\(MCLK\)//g'
実行時に以下を返します。
sed: can't read 800 MHz (MCLK)
: No such file or directory
これは改行エラーでも\t
非標準文字の問題でもないようですsed
(参照。単純なsedタブの交換が奇妙に失敗する)を修正する必要があります。
何が問題なのでしょうか?
答え1
あなたが持っている場合pgrep
:
grep -Po '[0-9]+ [KMGT]?Hz(?= \(MCLK\))' test.txt
答え2
xargs
入力を取得し、指定されたコマンドの引数に変換します。grep
興味のある行を返し、ファイル名を期待するコマンドにその行を引数としてxargs
追加します。まったくそうする必要はありませんsed
。xargs
sed
パターンに一致する行でのみ機能するように指定できます。
sed -i~ -e '/(MCLK)/{s/\t//g' -e 's/(MCLK)//g}' ~/test.txt
答え3
この試み、
sed '/(MCLK)/ s/(MCLK)//g;s/\t//' test.txt
800 MHz
/(MCLK)/
キーワードが検索されます。s/(MCLK)//g
削除されます(MCLK)
。s/\t//
タブが削除されます。
-i
インライン編集にオプションを使用できます。
編集された質問に、
awk -F '[$\t ]' '/(MCLK)/ {print $2" "$3}' test.txt
800 MHz
答え4
次のコマンドを試してください。うまくいきます。
注文する
sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"
出力
sed -n '/MCLK/p' filename| sed -r "s/^\s+//g"| sed -r "s/\(MCLK\)//g"
800 MHz