在“grep”命令中未检测到正斜杠

在“grep”命令中未检测到正斜杠

我在文本文件中有一个 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);

在匹配的每一行上替换//为:DIVPARTITION BY

$ sed '/PARTITION BY/s%//%DIV%' filename

相关内容