【发布时间】:2023-03-18 21:14:01
【问题描述】:
我正在更新一个使用 sed 命令的 C shell 脚本:
sed '/EOF/r $thingToAdd' $fileToAddItTo > $newFileOutput
我似乎无法找到 /r 命令的含义或作用。我认为这是为了查找和替换(类似于/s..../g)。
有什么想法吗?
【问题讨论】:
我正在更新一个使用 sed 命令的 C shell 脚本:
sed '/EOF/r $thingToAdd' $fileToAddItTo > $newFileOutput
我似乎无法找到 /r 命令的含义或作用。我认为这是为了查找和替换(类似于/s..../g)。
有什么想法吗?
【问题讨论】:
r 用于读取文件并将其追加到当前点。
您的示例中的点是地址/EOF/,这意味着该脚本将找到包含EOF 的行,然后在该点之后附加$thingToAdd 指定的文件。然后它将处理文件的其余部分。
换句话说:
$fileToAddItTo + $thingToAdd = $newFileOutput
-------------- ----------- --------------
1 5 1
2 6 2
3 3
EOF EOF
4 5
6
4
您可以在以下记录中看到这一点:
pax$ cat file1 ; echo === ; cat file2
file1_line:1
file1_line:2
file1_line:3
file1_line:4 EOF
file1_line:5
===
file2_line:1
file2_line:2
pax$ sed '/EOF/r file2' file1
file1_line:1
file1_line:2
file1_line:3
file1_line:4 EOF
file2_line:1
file2_line:2
file1_line:5
并且,针对您评论中关于是否会为包含EOF 字符串的每一 行执行此操作的问题,是的,它会:
pax$ cat file1 ; echo === ; cat file2
file1_line:1
file1_line:2 EOF
file1_line:3
file1_line:4 EOF
file1_line:5
===
file2_line:1
file2_line:2
pax$ sed '/EOF/r file2' file1
file1_line:1
file1_line:2 EOF
file2_line:1
file2_line:2
file1_line:3
file1_line:4 EOF
file2_line:1
file2_line:2
file1_line:5
而且,它会为每一行包含 EOF 字符串。通常,您会将这样的内容限制为包含 only EOF 字符串的行,因为这通常是它的设置方式(EOF 是该行的唯一内容)。您只需将地址更改为 /^EOF$/ 即可做到这一点(^ 和 $ 分别是行首和行尾锚点)。
否则它会拾取您可能没想到的行,例如包含 HEREOF、WRITEOFF 或 NEOFACISM 的行。
【讨论】: