2017-05-11 21 views
0

ジョブ名、ビジネス名、時間(分)を「 - 」(SfdcDataGovSeq-IntegraterJob-43)で区切ったテキストファイルがあります。このテキストファイルには多くのジョブがあります。私はジョブ名で検索し、その特定の行についてのみ43から0に時間を変更し、同じテキストファイルを更新したいと思います。何がすべきかを親切に助言してください。AIX(Sedコマンド)のUnixシェルスクリプト

私が使用している質問:(cat test.txt | grep "SfdcDataGovSeq" | sed -e 's/43/0 /'> test.txt)しかし、ファイル全体が1行だけで置き換えられています。

+0

ようこそStackOverflow。 [ツアー]をしてください。いくつかの書式設定オプションを使用して、質問の可読性を向上させることができます。そうでなければ素晴らしいmcve。 – Yunnosch

答えて

0
sed -e '/SfdcDataGovSeq/ s/43/0/' test.txt 

これは、検索が肯定的である場合にのみ置き換えられます。

エドと約束します。ワード境界を設定するための回避策はありますが、等価はawkですが堅牢ですが。

あなたはawkをを使用しての代わりに、sedをしなければならない
sed -e '/SfdcDataGovSeq/ s/\<43\>/0/g' test.txt 
+0

その行の43だけを置き換えるか、またはそのファイルにあるすべての '43'の値を0に置き換えますか? –

+0

'' SfdcDataGovSeq' 'を含む行だけを置換します。 –

+0

ジョブ名は異なるので、1行でしか動作しないので、間違いなく有用です –

0

awk 'BEGIN{FS=OFS="-"} $1=="SfdcDataGovSeq" && $3==43{$3=0} 1' file 

それは完全な文字列または数値(正規表現ではないが)はるかに堅牢現在受け入れSEDよりも上の、特定のフィールドに一致しないのでさまざまな可能な入力値が与えられた場合、入力ファイルに大混乱を招くでしょう。

+0

こんにちはエド、あなたは "{FS = OFS =" - "} –

+0

を説明できますか?入力と出力のフィールド区切り記号を" - "記号に設定して、データを" - "区切りフィールドに分割します。 www.gnu.org/software/gawk/manual/gawk.html#Field-Separatorsおよびhttps://www.gnu.org/software/gawk/manual/gawk.html#Output-Separators –

関連する問題