Awk 添加文本:不区分大小写,跨平台

Awk 添加文本:不区分大小写,跨平台,awk,sed,Awk,Sed,我有一个文件,需要在其中转换行。从 <id>ABC</id> <guid isPermaLink="false">ABC</guid> ABC 基础知识 需要获得以下信息: <id>ABC123</id> <guid isPermaLink="false">ABC123</guid> ABC123 ABC123 i、 例如,在或之前添加文本 问题是我不能

我有一个文件,需要在其中转换行。从

<id>ABC</id>
<guid isPermaLink="false">ABC</guid>
ABC
基础知识
需要获得以下信息:

<id>ABC123</id>
<guid isPermaLink="false">ABC123</guid>
ABC123
ABC123
i、 例如,在
之前添加文本

问题是我不能使这个不区分大小写和跨平台;对于BSD和GNU。据我所知,
sed
awk
由于BSD和GNU版本之间的差异,不太适合此用途

在这一点上,我有点困惑,不知道如何做这样一个相当简单的操作。也许有人能建议最好的解决方法?也许只使用shell的函数就可以做到这一点

Thx使用此Perl one liner(不区分大小写和跨平台):

perl-lpe的{(ABC)(|)}{${1}123${2}}ig'in_file>out_file
Perl one liner使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中。
-p
:一次循环输入一行,默认情况下将其分配给
$\uu
。在每次循环迭代后添加
print$\uuz

-l
:在行内执行代码之前,请先去掉输入行分隔符(
“\n”
,默认情况下在*NIX上),然后在打印时附加它

另请参见:


正则表达式使用以下修饰符:
/g
:重复匹配模式。
/i
:不区分大小写的匹配。

使用此Perl one liner(不区分大小写和跨平台):

perl-lpe的{(ABC)(|)}{${1}123${2}}ig'in_file>out_file
Perl one liner使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中。
-p
:一次循环输入一行,默认情况下将其分配给
$\uu
。在每次循环迭代后添加
print$\uuz

-l
:在行内执行代码之前,请先去掉输入行分隔符(
“\n”
,默认情况下在*NIX上),然后在打印时附加它

另请参见:


正则表达式使用以下修饰符:
/g
:重复匹配模式。

/i
:不区分大小写的匹配。

使用
awk
sub
功能,您可以尝试以下操作。尽管专家们总是建议使用像xmlstarlet这样的工具来更好地理解xml

awk '{sub(/<\/(gu)?id/,"123&")} 1' Input_file

说明:使用
awk
sub
(替换)功能分别用
123
123
替换

使用
awk
sub
功能,您可以尝试以下操作。尽管专家们总是建议使用像xmlstarlet这样的工具来更好地理解xml

awk '{sub(/<\/(gu)?id/,"123&")} 1' Input_file

< < >强> >使用<代码>子< /代码>(代换)函数,<代码> AWK < /代码>代替<代码> >代码>或<代码> <代码> > <代码> 123 > /代码>和<代码> 123代码> > <>(p)>如果你想要一个可移植的忽略实例替换,则考虑<代码> Perl >:

perl-pe的(?i)~123$&'文件
ABC123
ABC123

< /代码> 如果您需要一个可移植的忽略实例替换,则考虑<代码> Perl >:

perl-pe的(?i)~123$&'文件
ABC123
ABC123
awk '{sub(/<\/([gG][Uu])?[iI][Dd]/,"123&")} 1' Input_file
awk -v IGNORECASE=1 '{sub(/<\/(gu)?id/,"123&")} 1' Input_file