crn.txt
次のテキストを含むテキストファイルがあります。
9 1 * * 3,6 /opt/testtingtools/kos/bin/cos.sh
55 23 * * * /opt/testtingtools/tqdaily.sh 2>>/opt/toolcheck/extract.err
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
出力が次のように表示されるように、単語と更新を含む行をtesttingtools
削除する必要があります。crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1
私はコマンドを使用しています
sed '/testtingtools/d' crn.txt 2>&1 | tee crn.txt
Bashまたはコマンドラインから実行できますが、スクリプト内では実行できません。私はUnixサーバー(sunSolaris)を使用しています。
Linuxでは実行できますが、Unixでは実行できないコマンドもあります。
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
「動作しない」とは、特定の行を削除しないことを意味し、スクリプト内のコードを使用するとファイル全体が消去されます。しかし、コマンドラインでコードを使用するとcrn.txt
。
答え1
Solarisではsed
内部編集はできません。
Linuxでは、次のものを使用できます。
sed -i '/testtingtools/d' crn.txt
Solaris および Linux で実行できる移植可能な方法は次のとおりです。
cp crn.txt crn.tmp
sed '/testtingtools/d' <crn.tmp >crn.txt &&
rm crn.tmp
発生する可能性のある問題は、tee
ファイルが読み取られる前にファイルが切り捨てられて空のファイルになることです。sed
パイプラインのコマンドは同時に実行されます。
通常、同じコマンドから切り捨てられたファイルを読み取ることを避け、代わりに一時ファイルを使用することをお勧めします。これがsed -i
後ろから起こるものです。
他のコマンドに似ています。
echo "$(sed '/testtingtools/d' crn.txt)" > crn.txt
次のように書くのが最善です。
sed '/testtingtools/d' crn.txt >crn.txt
これ最初すべての標準シェル(LinuxおよびSolaris)で発生する現象は、シェルがリダイレクトを確認し、出力ファイルを0サイズに切り捨てることです。 それからこのコマンドは、sed
LinuxとSolarisの両方で期待どおりに機能しません(つまり、ソースファイルを編集したい場合)。
答え2
We can do it both sed and awk
awkメソッド
awk '!/testtingtools/{print $0}' crn.txt >l.txt &&yes| mv l.txt crn.txt
出力
cat crn.txt
50 11 * * 6 /opt/devtools/toolbox/toolcheck.sh >>toolcheck.log 2>&1
55 23 * * 5 /opt/devtools/toolbox/reset.sh >>/opt/toolcheck/log/reset.log
56 23 * * 6 /opt/prdtools/tqweekly.sh 2>>/opt/checktool/extract.err
30 11 * * 6 /opt/proadtools/tool.sh >/opt/checkingtools/tool.log 2>&1