Bash删除完全匹配的variables,并searchstring忽略大小写

第一个查询:

我有一个文本文件username.txt包含

user1 user2 user3 

我的Bash文件如下> test.sh

 #!/bin/bash # REMOVE user which donot have any COMBLIMIT num=0 cat /tmp/username.txt | while read users do num=$[$num+1] USERID=`echo $users | awk '{print $1}'` SRVID=`mysql -uxxx -pxxx -e "use radius; SELECT srvid FROM radius.rm_users WHERE rm_users.username = '$USERID';" |awk 'FNR == 2 {print $1}'` COMBLIMITCHECK=`mysql -uxxx -pxxx -e "use radius; SELECT limitcomb FROM rm_services WHERE srvid = '$SRVID';" |awk 'FNR == 2 {print $1}'` if [[ $COMBLIMITCHECK -eq "1" ]]; then echo "$USERID have Quota limit = 1" else echo "$USERID have no Quota Limitations = 0 , So removing it from the users list." sed -i '/\$USERID\>/d' /tmp/username.txt fi done 

sed -i '/\$USERID\>/d' /tmp/username.txt >> bash中的这个命令不会删除完全匹配的用户名。 我想删除包含特定用户名(variables)的行。

第二个查询:

文件包含以下行

 cOke is bad diet-COKE cokeisgood 

我该如何捕捉这个文件,并search任何包含“ 可乐 ”的字,而不pipe大小写。

sed -i'/ \ $ USERID> / d'/tmp/username.txt

你已经把你的sedexpression式用单引号括起来了。 这将停止$ USERID的扩展并使其用作string文字。 你应该将sedexpression式放在"双引号”中以允许variables扩展。

文件包含以下行

-i切换到grep忽略大小写。

你也可以在sedexpression式中使用I(首字母i)(这可能是一个GNU sed的东西)

 echo "cOke is bad" | sed -n "/coke/Ip"