Awk 如何用标签包装包含字符的字符串?

Awk 如何用标签包装包含字符的字符串?,awk,sed,tags,Awk,Sed,Tags,您好,我是Linux noob,我想知道如何用标记替换以“/”开头的行。 下面是一个例子: /Foo is awesome 我想得到 <i>Foo is awesome</i> Foo太棒了 我将感谢任何帮助 您可以尝试下面的sed命令 $ sed 's~^/\(.*\)~<i>\1</i>~' file <i>Foo is awesome</i> $sed的~^/\(.\)~\1~文件 福太棒了 通过awk $

您好,我是Linux noob,我想知道如何用标记替换以“/”开头的行。
下面是一个例子:

/Foo is awesome
我想得到

<i>Foo is awesome</i>
Foo太棒了

我将感谢任何帮助

您可以尝试下面的sed命令

$ sed 's~^/\(.*\)~<i>\1</i>~' file
<i>Foo is awesome</i>
$sed的~^/\(.\)~\1~文件
福太棒了
通过awk

$ awk '/^\//{sub(/^\//,"<i>");sub(/$/,"</i>")}1' file
<i>Foo is awesome</i>
$awk'/^\/{sub(/^\/,“”);sub(/$/,“”)1文件
福太棒了

您可以将awk与
substr
一起使用,如下所示:

awk '/^\//{$0 = "<i>" substr($0,2) "</i>"}1' file
awk'/^\/{$0=”“substr($0,2)”“}1”文件
当行的开头有一个
/
时,追加标记并使用
substr
从原始行中删除斜杠
1
true
因此awk对每一行执行默认操作,即打印该行。

sed'\\\\\^/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\^/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
sed '\#^/# {s//<i>/;s#$#</i>#;}' YourFile
# or (with maybe space before)
sed '\#^ */# {s//<i>/;s#$#</i>#;}' YourFile
#或者(前面可能有空格) sed“\\\^*/{s///s$\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
另一种sed方式是,这允许在这一行上工作(如果有其他事情要做,而不是简单地通过标记查找)

$awk'sub(“^/”,“){$0=$0”“}1”文件
福太棒了

工作起来很漂亮。谢谢因此
sub
的返回值指示模式是否匹配?是。sub()和gsub()的返回值是regexp的匹配次数,在sub()的情况下,返回值只能是1或0。
$ awk 'sub("^/","<i>"){$0 = $0 "</i>"} 1' file
<i>Foo is awesome</i>