2016-06-15 7 views
0

Linux:sedを使用してテキストファイルのタブ区切り行の値を置き換える方法。 MYFILEでLinux:sedを使用してテキストファイルのタブ区切り行の値を置き換えます

サンプルデータ:予想

98104930 CLOSED /data/nightlybackup/adx.ngx [email protected] 

98104930 FIXED /data/nightlybackup/adx.ngx [email protected] 

id=98104930 
[email protected] 
testcase=/data/nightlybackup/adx.ngx 
oldstatus=CLOSED 
newstatus=FIXED 

私が試した:

sed -i "s/${id}\\t${oldstatus}\\t${testcase}\\t${qa}/${id}\\t${newstatus}\\t${testcase}\\t${qa}/g" ${myfile} 

しかし、それは動作しませんが。誰かが同じソリューションを提供できますか?

+0

として、ほぼすべての文字を使用することができますsedので

sed -i "s#${id}\t${oldstatus}\t${testcase}\t${qa}#${id}\t${newstatus}\t${testcase}\t${qa}#g" ${myfile} 

'id'、' oldstatus'のような変数の値を含む完全なスクリプトを、提供してください。 –

+0

@krzyk '私が試した 'の前に5行に値があります。 – Barmar

答えて

2

タブを二重にエスケープする必要はありません。\tを使用してください。 あなたの変数の1つが/testcase)を使用しているため、sedが別のセパレータを使用する必要があります。 #を使用できます。あなたは、セパレータ、s///s###などs,,,

+0

うまく動作します!あなたは素晴らしいです! –

1

あなたは、このためのawkを使用して検討する必要があります。

$ awk -v id='98104930' \ 
     -v newstatus='FIXED' \ 
     -v testcase='/data/nightlybackup/adx.ngx' \ 
     -v qa='[email protected]' \ 
     -v OFS='\t' \ 
    '$1 == id && $3 == testcase && $4 == qa {$2=newstatus} 1' file 
98104930 FIXED /data/nightlybackup/adx.ngx [email protected] 

あなたは特殊文字とのトラブルを避けるため、この方法は、例えば.はeverytingにマッチし、/を区切り文字として使用されている場合/data/nightly...はあなたの置換を中断します。

+0

あなたの助けてくれてありがとう、私は以下のsedメソッドを使いました。 –

関連する問題