回答:
使用する
cut -d: -f2-
の代わりに
cut -d: -f2
2番目のフィールドから行末まで何でも取得するには:
TDS="$(grep 'Logfile started' process.log | awk '{print $3,$4}' | cut -d: -f2-)"
echo "$TDS"
awk
クールなツールであり、非常に複雑なタスクをそれで解決できます。しかし、あなたの質問のために、私はむしろbashの基本的な機能に固執したいと思います。
この簡単に削除する削除のために、私は次のことを行います:
zehe="Logfile started :29.06.2019 23:03:17"
echo "${zehe#*:}"
これは印刷されます:
29.06.2019 23:03:17
私があなたの立場にいて、プログラミングとbashを学び始めたとき、私はこのハンドブックの多くを学びました:
問題のいくつかの例と興味深い情報がここにあります。「サブストリングの削除」を探してください。
これがsed
解決策です:
$ echo ':29.06.2019 23:03:17' | sed 's/^://'
29.06.2019 23:03:17
コマンドsed 's/^://'
が実行していることは、各行の先頭のs
コロン文字:
を^
空の文字列に置き換えること//
です。
上記のawk
フィールドセパレータをに変更し、^:
(各行の)2番目のフィールドを出力するトリッキーなソリューションを次に示します。
$ echo ':29.06.2019 23:03:17' | awk -F'^:' '{print $2}'
29.06.2019 23:03:17
grep
(説明)でもタスクを実行できますが、これは大量のデータに対する最も速い解決策になる可能性があります。
$ echo 'Logfile started :29.06.2019 23:03:17' | grep -Po '^Logfile started :\K.*'
29.06.2019 23:03:17
または、次のコマンドを使用してファイルを直接処理します。制限^
は削除されます。
grep -Po 'Logfile started :\K.*' process.log
上記はsed
、キャプチャグループによっても達成できます()->\1
。
sed -nr 's/^.*Logfile started :(.*)$/\1/p' process.log
式^.*<something>.*$
が行全体に一致する場合、これにはが含まれます<something>
。このコマンドs/old/new/
は、この行を最初のキャプチャグループの内容で置き換えます(角かっこ内の式はより具体的かもしれません)。このオプション-r
は、拡張正規表現を有効にします。オプション-n
はの通常の出力を抑制し、sed
最後にコマンドp
は一致を出力します。
awk
特別な意味を持つ文字を含むマルチ文字FSができることを知りませんでした!今日学んだこと。
これは既にで処理しawk
ているので、すべてを直接実行することもできます。
$ echo "foo bar :29.06.2019 23:03:17" | awk '{sub(/^:/,"",$3); print $3,$4}'
29.06.2019 23:03:17
sub
コマンドの一般的なフォーマットがあるsub(/REGEX/, REPLACEMENT, TARGET)
と、正規表現のためのすべての一致を置換するREGEX
文字列をREPLACEMENT
入力文字列にTARGET
。ここでは、3番目のフィールド()の最初の:
(^
「始まり」を意味する$3
)を何も置き換えません。
もちろん、それをawkで実行している場合は、awkですべてを実行して、すべてを1つの操作で実行することもできます。
$ echo "Logfile started :29.06.2019 23:03:17" |
awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}'
29.06.2019 23:03:17
または、あなたの場合:
TDS="$(awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}' process.log)"
echo "$TDS"
別のbashソリューション:
$ echo "Logfile started :29.06.2019 23:03:17" | xargs bash -c 'echo "${2#*:} $3"'
29.06.2019 23:03:17
xargs
変換しstdin
ますbash
。echo
とtail -n1 /path/to/reportfile.txt
。