我有一些 iconv 的输出,例如
$ iconv -l | grep ISO | head -5
CSISO4UNITEDKINGDOM//
CSISO10SWEDISH//
CSISO11SWEDISHFORNAMES//
CSISO14JISC6220RO//
CSISO15ITALIAN//
durrantm:~
我怎样才能将//
's 更改为--
's ?
我尝试过$ (iconv -l | grep ISO).gsub('\/\/','--')
但没有运气。
答案1
有几种方法使用tr
,awk
或sed
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
或多或少是sed
(grep
代表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
有多种方法可以做到这一点,但我会使用sed
aka -n
or--quiet
选项--silent
来默认抑制输出。
iconv -l | sed -n -e '/ISO/ s://:--:p'
该 sed 脚本忽略不包含“ISO”的行,将 // 更改为 --,并打印(修改后的)匹配行。脚本中最后的“p”告诉 sed 打印匹配的行。
为了避免大量丑陋的反斜杠转义,我使用了:
正则表达式分隔符而不是/
有关更多详细信息,请参阅 sed 手册页。