Bash 删除精确匹配的变量并搜索忽略大小写的字符串

Bash 删除精确匹配的变量并搜索忽略大小写的字符串

第一个查询:

我有一个文本文件 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 中的此命令不会删除完全匹配的用户名。我想删除包含特定用户名(变量)的行。

第二个查询:

文件包含以下行

cOke is bad 
diet-COKE 
cokeisgood

我如何 cat 此文件并搜索任何包含“”的单词可乐“无论大小写。

答案1

sed -i '/\$USERID>/d' /tmp/用户名.txt

您已将 sed 表达式括在'单引号中。这将停止 $USERID 的扩展并将其用作字符串文字。您应该将 sed 表达式括在"双引号中以允许变量扩展。

文件包含以下行

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

您还可以在 sed 表达式中使用 I(大写 i)(这可能是 GNU sed 的事情)

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

相关内容