文字列とワイルドカードの比較

文字列とワイルドカードの比較

ファイルの最初の行と最後の行に特定の文字列が含まれていることを確認しようとしています。ファイルは次の形式に従います。

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

おすすめ記事