今について質問がありましたgrep
。項目が多いテキストファイルがありますが、特定の数字だけを印刷したいと思います。これは私のテキストですが、印刷したいのですが700
…
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
答え1
ファイルの構造は簡単で、レコードを簡単に区別することができ、そのうちの1つの値が必要なので、以下を使用するのが最も簡単ですawk
。
awk '/^Mødt ind:/ { print $NF }' file
これは/^Mødt ind:/
、textで始まるすべての行に対して次のブロックが実行されることを意味しますMødt ind:
。このブロックは、$NF
行の最後のフィールド値であるを印刷します(NF
最後のフィールドのフィールド番号であり、$
フィールド値はその前に配置されます)。
標準sed
:
sed -n 's/^Mødt ind: \(.*\)/\1/p' file
これは同じ行マッチを実行しますawk
が、その行の内容をコロンとスペースの後に続くものに置き換えます。通常の出力は無効-n
になり、式によって変更された行のみが出力されます。
awk
より読みやすく、理解/修正が簡単なので、まだ解決策を探しています。
答え2
sed
お分かりのように、この問題は単独で処理できます。
sed 's/.*ind:\ \(.*\)/\1/;tx;d;:x'
これは検索と置換操作です。
.*ind:\ \(.*\)
任意の文字で始まり、その後に(エスケープされたスペース)が続く行を検索しますind:
。\(.*\)
残りの行を「一致」するために使用され、最初の一致に保存されると、行全体が次に置き換えられます\1
。次のように動作します;tx;d;:x
。tx
交換が成功したら、ラベルxに分岐し、ラベルxのタグであるd
行を削除します。:x