Lit*_*ode 4 sed awk perl text-processing
示例输入:
foobar@example.com foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
示例输出:
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
因此,在“正常”情况下,执行以下操作显然很容易:
sed 's/.com/.org/g'
Run Code Online (Sandbox Code Playgroud)
但显然在这种情况下,我只想操纵第一列中的后缀,我希望第二列保持不变。
我不介意你建议使用什么工具。但我更喜欢它在标准 linux 上可用而无需进一步安装(即类似于sed
或awk
或perl
更可取的东西bobsobscuretoolthatneedsinstalling
)。
如果您只想替换第一次出现的.com
with .org
,您所需要的只是 seds///
运算符的默认行为。只是不要使用g
标志:
$ sed 's/.com/.org/' file
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
如果您真的只想对第一个逗号定义的字段进行更改,以便如果第一个.com
出现在行中的其他地方,它将保持不变,您可以执行以下操作:
$ perl -pe 's/^(\S+)\.com/$1.org/' file
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
或者,如果com
作为子字符串出现,则更安全(例如foo.common.net
):
$ perl -pe 's/^(\S+)\.com\b/$1.org/' file
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
或者,在 GNU sed 中:
$ sed -E 's/^(\S+)\.com\b/\1.org/' file
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)
或者,可移植(假设第一个字段由第一个空格而不是制表符或其他空格定义):
$ sed -E 's/^([^ ])\.com /\1.org /' file
foobar@example.org foo@example.com,bar@example.com
Run Code Online (Sandbox Code Playgroud)