字符串与通配符比较

字符串与通配符比较

我试图检查文件的第一行和最后一行,看看它是否包含某个字符串。该文件将遵循以下格式

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

因为你已经将wordpattern;交换了你想要类似的东西:

...
case "$header" in
    HEADER*) tail -n +2 rubbish.txt > rubbish.txt.out
    header="TRUE"
    ;;
    *) echo no HEADER present ;;
esac
...

实现目标的另一种方法是sed仅在标题行存在时才删除它(此处使用 GNU-i扩展进行就地编辑):

sed -i '1{/^HEADER/d}' rubbish.txt

$文件最后 ( ) 行上的潜在页脚行的类似示例:

sed -i '${/^TOTAL IS:/d}'  rubbish.txt

答案2

的错误用法caseif与通配符一起使用。

if [[ "$(head -n +1 rubbish.txt)" =~ "HEADER" ]]; then
    tail -n +2 rubbish.txt > rubbish.txt.out
else echo no HEADER present
fi

相关内容