如何 grep,然后在输出上搜索和替换?

如何 grep,然后在输出上搜索和替换?

我有一些 iconv 的输出,例如

$ iconv -l | grep ISO | head -5
CSISO4UNITEDKINGDOM//
CSISO10SWEDISH//
CSISO11SWEDISHFORNAMES//
CSISO14JISC6220RO//
CSISO15ITALIAN//
durrantm:~

我怎样才能将//'s 更改为--'s ?

我尝试过$ (iconv -l | grep ISO).gsub('\/\/','--')但没有运气。

答案1

有几种方法使用tr,awksed

TR:

 iconv -l | grep ISO |head -5 |tr '/' '-'

AWK:

iconv -l | awk '/ISO/{gsub("//","--"); print $0}' |head -5

社会经济发展局:

iconv -l | grep ISO |head -5 | sed 's/\//-/g'
# or, to avoid needing to escape the backslashes:
iconv -l | grep ISO |head -5 | sed 's#/#-#g'

答案2

grep或多或少是sedgrep代表g/re/p命令 in的子集ed,并且sed类似于ed应用于 [s] 流),因此您通常不需要将它们通过管道连接在一起。

iconv -l | sed '/ISO/!d;s,//,--,g' | head -n 5

答案3

sed是一个选项:

$ iconv -l | grep ISO | sed 's#/#-#g' | head -5
CSISO4UNITEDKINGDOM--
CSISO10SWEDISH--
CSISO11SWEDISHFORNAMES--
CSISO14JISC6220RO--
CSISO15ITALIAN--

答案4

有多种方法可以做到这一点,但我会使用sedaka -nor--quiet选项--silent来默认抑制输出。

iconv -l | sed -n -e '/ISO/ s://:--:p'

该 sed 脚本忽略不包含“ISO”的行,将 // 更改为 --,并打印(修改后的)匹配行。脚本中最后的“p”告诉 sed 打印匹配的行。

为了避免大量丑陋的反斜杠转义,我使用了:正则表达式分隔符而不是/

有关更多详细信息,请参阅 sed 手册页。

相关内容