![在“grep”命令中未检测到正斜杠](https://linux22.com/image/110638/%E5%9C%A8%E2%80%9Cgrep%E2%80%9D%E5%91%BD%E4%BB%A4%E4%B8%AD%E6%9C%AA%E6%A3%80%E6%B5%8B%E5%88%B0%E6%AD%A3%E6%96%9C%E6%9D%A0.png)
我在文本文件中有一个 sql 查询,它有一行如下所示:
PARTITION BY (date_key // 100000000);
现在,我想用“DIV”一词替换两个正斜杠。
为此,我在 shell 脚本中执行了以下操作:
strg=$(grep "PARTITION BY" $entry) ## $entry has the file_name
strg2=$(echo "$strg" | sed 's%\/\/%DIV%g')
但它并没有按照我的意愿工作。经过进一步的探索,我发现正斜杠甚至没有被发现。
echo "$strg"
我PARTITION BY (date_key );
也尝试过
printf ">%s<\n" "$strg"
和
printf "%q\n" "$strg"
但输出是:
>PARTITION BY (date_key );<
和
PARTITION\ BY\ \(date_key\ \)\;
分别。
但是当我grep "PARTITION BY" <file_name>
在命令行上执行操作时,我得到了正确的输出:
PARTITION BY (date_key // 100000000);
有人可以指出我缺少什么吗?
答案1
grep
将检测到//
:
$ echo 'PARTITION BY (date_key // 100000000);' | grep '//'
PARTITION BY (date_key // 100000000);
sed
将取代它们:
$ echo 'PARTITION BY (date_key // 100000000);' | sed 's%//%DIV%'
PARTITION BY (date_key DIV 100000000);
在匹配的每一行上替换//
为:DIV
PARTITION BY
$ sed '/PARTITION BY/s%//%DIV%' filename