我试图检查文件的第一行和最后一行,看看它是否包含某个字符串。该文件将遵循以下格式
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
...
实现目标的另一种方法是sed
仅在标题行存在时才删除它(此处使用 GNU-i
扩展进行就地编辑):
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