我有一个存储字符串的变量。我在这里遇到了最坏的情况
var='this is
my
name'
如何查找此变量是否存在于file.txt中
这是我的file.txt
hi all
this
is my
name
but no one likes it
我尝试了什么
if grep -Fwq "$var" file.txt
then
echo "Duplicate"
fi
但只有当var和file.txt都有公共空格和换行格式
时才能正常工作答案 0 :(得分:1)
sed + grep 方法:
tree.find('{0}Terminal/{0}Terminal.ConnectivityNode'.format(cim)).attrib['{0}resource'.format(rdf)]
echo "$var1"
this is
my
name
准备模式:
cat file.txt
hi all
this
is my
name
but no one likes it
p=$(sed -zE 's/[[:space:]]+/[[:space:]]*/g' <<< "$var1")
if grep -wzq "$p" file.txt; then echo "Duplicate"; fi
Duplicate
- 将每个空格表示为POSIX字符类,以便在sed -zE 's/[[:space:]]+/[[:space:]]*/g'
命令中进一步使用(多个空格被压缩为单个空格)
grep
- 将输入和输出数据视为行序列,每行以零字节(ASCII NUL字符)而不是换行符结束
答案 1 :(得分:0)
使用GNU awk进行多字符RS(我也使用\s
代替[[:space:]]
以简化,因为我还在使用gawk):
$ awk -v RS="$var" 'BEGIN{gsub(/\s+/,"\\s+",RS)} END{if (NR>1) print "Duplicate"}' file
Duplicate
以上会在使用RS之前将var
中的转义序列转换为文字字符(例如\t
- >一个制表符,\n
- >换行字符),如果是然后使用以下方法设置RS:
$ var="$var" awk 'BEGIN{RS=ENVIRON["var"]; ...
而不是使用-v
设置。