我想将一个文件 ( ) 的数据添加到文件夹中的random.txt
另一组文件 ( ) 中。real.txt
举个例子:
$ cat random
some text
$ cat real.txt
sample text
如果我运行以下命令:
$ sed i.old '1s;^;some text\n;' real.txt
$ cat real.txt
some text
sample text
该命令将 file 的文本添加random
到 file 中real.txt
,但 的内容random
不固定。是否可以random
将的内容重定向到real.txt
?
我尝试了以下命令:
$ sed -i.old "1s;^;$(cat random)\n;" real.txt
$ cat real.txt
给出输出:
some text
sample text
当我的随机文件收到以“/*”开头的txt时,就会出现问题。它显示以下错误:
$ cat real.txt
/*new text
new line*/
$sed -i.old "1s;^;$(cat random)\n;" real.txt
sed: -e expression #1, char 16: unterminated `s' command
答案1
sed
具体解决为什么你的语法不起作用的问题,单引号内不会发生进程替换。
这个语法对我有用:
sed -i.old "1s;^;$(cat random)\\
;" filename
如果您使用 GNU sed
,这也可以工作:
sed -i.old "1s;^;$(cat random)\n;" filename
在进行编辑并专注于 GNU 时sed
,我想到了两种解决方案:
1) 避免内部random
麻烦的语法sed
。在您的具体情况下,这是在文件内使用文字换行符。
代替:
/* line1
line2 */
将换行符(在第 1 行末尾)编码为\n
:
/* line1\n line2 */
random
(第 2 行末尾)的最后一个换行符是已经\n
按照命令行中的方式编码sed
。
2) 放弃就地编辑sed
并使用“ cat
-and- mv
”方法:
for f in filename; do
mv $f $f.old
cat random $f.old > $f
done