ファイルの最初の行と最後の行に特定の文字列が含まれていることを確認しようとしています。ファイルは次の形式に従います。
HEADER 2016-11-7
...
TOTAL IS: 20938
HEADER
最初の行に文字列が含まれていることを確認してから削除しようとしています。私は持っています:
#get first line of file
header=`head -n +1 rubbish.txt`
echo $header
#If first line contains header, remove it and ouput it to new file
case "HEADER" in
*"$header"*) tail -n +2 rubbish.txt > rubbish.txt.out
header="TRUE"
;;
*) echo no HEADER present ;;
esac
出力:
HEADER 10-10-2019
no HEADER present
なぜタイトルがないと思いますか?
答え1
word
;を変更したので、pattern
次のようなことをしたいと思います。
...
case "$header" in
HEADER*) tail -n +2 rubbish.txt > rubbish.txt.out
header="TRUE"
;;
*) echo no HEADER present ;;
esac
...
目標を達成するもう1つの方法は、sed
ヘッダー行がある場合にのみヘッダー行を削除することです(-i
ここで内部編集にはGNU拡張を使用)。
sed -i '1{/^HEADER/d}' rubbish.txt
$
ファイルの最後の()行にある潜在的なフッター行の同様の例:
sed -i '${/^TOTAL IS:/d}' rubbish.txt
答え2
誤った使用case
法if
ワイルドカード文字と一緒に使用されます。
if [[ "$(head -n +1 rubbish.txt)" =~ "HEADER" ]]; then
tail -n +2 rubbish.txt > rubbish.txt.out
else echo no HEADER present
fi