Bash Sed插入文件内容而不是文件名
我有两个文件,希望将一个文件的内容插入另一个文件,替换指定的行 文件1:Bash Sed插入文件内容而不是文件名,bash,sed,replace,Bash,Sed,Replace,我有两个文件,希望将一个文件的内容插入另一个文件,替换指定的行 文件1: abc def ghi jkl 文件2: 123 以下代码就是我的代码。 file1=numbers.txt file2=letters.txt linenumber=3s echo $file1 echo $file2 sed "$linenumber/.*/r $file1/" $file2 这将导致输出: abc def r numbers.txt jkl abc def 123 jkl 我希望的结果是:
abc
def
ghi
jkl
文件2:
123
以下代码就是我的代码。
file1=numbers.txt
file2=letters.txt
linenumber=3s
echo $file1
echo $file2
sed "$linenumber/.*/r $file1/" $file2
这将导致输出:
abc
def
r numbers.txt
jkl
abc
def
123
jkl
我希望的结果是:
abc
def
r numbers.txt
jkl
abc
def
123
jkl
我认为这可能是bash变量的问题,但当我手动输入信息时,仍然会得到相同的输出
如何理解sed和/或read命令?我将使用
c
命令,如下所示:
linenumber=3
sed "${linenumber}c $(< $file1)" "$file2"
你不能那样使用
r
r
必须是正在运行的命令。脚本将该行替换为字符串“r$file1”
。s
命令中的sed
部分不会重新解释为命令,而是按字面意思理解
你可以:
linenumber=3
sed "$linenumber"' {
r '"$file1"'
d
}' "$file2"
读取第3行,打印文件1,然后删除该行
请参阅,以获得良好的解释和参考
当然,我们可以让这成为一条单行线:
sed -e "$linenumber"' { r '"$file2"$'\n''d; }' "$file1"
生活实例在。为什么
s
在行号中?@KamilCuk如果我正确理解sed,那么“s”不代表替换?我试图用文件2的内容替换/替换第3行。谢谢,但当我运行代码时,它只会导致abc def ghi jkl
Och,我想我把文件1和文件2混合在一起了,尝试交换它们当我交换它们时,它会变为123
它在教程点上运行得很好,但在我的终端上仍然不起作用。我正在运行Ubuntu18.04,已经重新安装了sed,但没有用。有什么想法吗?:/我能猜到:编码。尝试在文件上运行dos2unix
。可能会发布这些文件的cat file | hextump-C
的输出?通常sed很难处理DOS换行。谢谢您的帮助,但我收到了123
啊,您的linenumber
可能仍然设置为3s
。我已经添加了如何设置它。