Awk如何更改一个单词,但不是每个字母的实例

Awk如何更改一个单词,但不是每个字母的实例,awk,Awk,我编写了一个AWK程序,将I更改为I,将AWK更改为AWK。它可以工作,但它也会将包含i的每个单词更改为和i。因此写入将更改为写入 我如何将单词I更改为I 这是我的节目: '{gsub(/i/, "I");gsub(/awk/, "AWK");print}' 为此,我认为最好使用sed: $ echo "heilo i aia" | sed -r 's/(\s)i(\s)/\1I\2/g' heilo I aia sed s/hello/bye/g将所有hello替换为bye -r允许使

我编写了一个AWK程序,将
I
更改为
I
,将
AWK
更改为
AWK
。它可以工作,但它也会将包含
i
的每个单词更改为和
i
。因此
写入
将更改为
写入

我如何将单词
I
更改为
I

这是我的节目:

'{gsub(/i/, "I");gsub(/awk/, "AWK");print}'

为此,我认为最好使用
sed

$ echo "heilo i aia"  | sed -r 's/(\s)i(\s)/\1I\2/g'
heilo I aia
  • sed s/hello/bye/g
    将所有
    hello
    替换为
    bye
  • -r
    允许使用简单的
    ()
    捕捉组
  • (\s)i(\s)
    捕获“空格”(制表符,空格…),然后再次捕获字母
    i
    和“空格”
  • \1I\2
    将它们打印回来
使用
awk
部件:

$ echo "heilo i aia this awk is awkward"  | sed -r -e 's/(\s)i(\s)/\1I\2/g' -e 's/(\s)awk(\s)/\1AWK\2/g'
heilo I aia this AWK is awkward
如果正在使用,则单词边界运算符
\y
可用,因此您可以搜索
\yi\y

# without \y
$ echo 'i use gawk, which is acronym for gnu awk' | awk '{gsub(/i/, "I");gsub(/awk/, "AWK");print}'
I use gAWK, whIch Is acronym for gnu AWK
# with \y
$ echo 'i use gawk, which is acronym for gnu awk' | awk '{gsub(/\yi\y/, "I");gsub(/\yawk\y/, "AWK");print}'
I use gawk, which is acronym for gnu AWK
通常,正则表达式中的单词边界是
\b
,但在gawk中不是:如中所述

这与awk语言将“\b”定义为冲突 退格,因此gawk使用不同的字母。另一种方法 将需要GNU操作符中的两个反斜杠,但是 这被认为太令人困惑了。当前使用“\y”的方法 GNU'\b'似乎是两种邪恶中较小的一种


此功能在中不受支持。

如果您使用的是GNU
awk
,它支持
egrep
表达式,因此您可能希望使用单词边界
\

pax> echo "Know that i am alive" | awk '{gsub(/\<i\>/,"I");print}'
Know that I am alive

pax> echo "awk is good to gawk at" | awk '{gsub(/\<awk\>/,"AWK");print}'
AWK is good to gawk at
pax>echo“知道我还活着”{gsub(/\/,“i”);print}
我知道我还活着
pax>echo“awk在”{gsub(/\/,“awk”);print}上呆呆地看着很好”
AWK是一个很好的呆呆的地方

对于这一点,perl可能是一个更好的选择

perl -pe 's/\bi\b/I/g;s/\b\awk\b/AWK/g' your_file

如果您不能使用
gawk
,您可以尝试

{
    gsub(/ i /," I ")
    sub(/ i$/," I")
    sub(/^i $/,"I ")
    print
}

我也尝试过使用\<\>但没有成功,因为我使用的是ubuntu 12.04lts。不确定这是否重要。足够简单的修复方法是,确保安装
gawk
或升级到Debian:-)我在一个新的ubuntu 12.04上验证过,但它不起作用:默认
awk
mawk
提供,它的功能比
gawk
少。AFAIK
mawk
没有单词边界运算符(
\
\y
)。因此有两种选择:安装
gawk
以提供更强大的
awk
命令,或者使用其他答案中建议的
sed
perl