iyr*_*rin 1 sed regular-expression
/fi/a
下面做 什么?
sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n xfce-session \n' /etc/xrdp/startwm.sh
Run Code Online (Sandbox Code Playgroud)
看起来它找到任何包含“fi”的行,然后将该字符串写入下一行。不幸的是,虽然它们似乎只针对“fi”,但它也适用于该文件中包含单词“profile”的行。
此处和其他几个地方推荐使用该命令:
https://medium.com/@vivekteega/how-to-setup-an-xrdp-server-on-ubuntu-18-04-89f7e205bd4e
该命令完全按照您所说的进行。它将将该字符串附加到一行中第一次出现的每个位置。fi
但由于它只是寻找fi
,它还将匹配“profile ”或“ finite ”或“ verifiable ”或任何其他包含 的字符串fi
。
为了避免这种情况,您可以指定它只在单词边界处匹配 ( \b
)。对于 GNU sed
(也可能是其他的,\b
相对可移植):
$ cat file
profile
finite
verifiable
foo bar fi
$ $ sed '/\bfi\b/a #xrdp multiple users configuration \n xfce-session \n' file
profile
finite
verifiable
foo bar fi
#xrdp multiple users configuration
xfce-session
Run Code Online (Sandbox Code Playgroud)
fi
如您所见,仅更改了独立版本。所以你可以将原来的命令更改为:
sudo sed -i.bak '/\bfi\b/a #xrdp multiple users configuration \n xfce-session \n' /etc/xrdp/startwm.sh
Run Code Online (Sandbox Code Playgroud)
如果你的sed
风味不知道\b
但支持-E
,你也可以这样做:
sed -E '/(^| )fi( |$)/a #xrdp multiple users configuration \n xfce-session \n' file
Run Code Online (Sandbox Code Playgroud)
然而,据我所知,大多数 sed 实现无法处理\n
,所以这几乎肯定需要 GNU sed 。