如何使用 echo 命令将字符串附加:/etc/simmmerin/bin/
到文件中的filename
现有行上。无法让它工作。
echo ":/etc/simmerin/bin/" >> filename
它只是附加在文件的底部,而不是继续我想要的行。我想使用echo
而不是进入每个文件vim
或类似的文件。
答案1
该文件末尾已经有一个换行符,终止最后一行。任何附加的内容都会出现在另一行。您需要覆盖最后的换行符,而仅通过>>
重定向是无法做到这一点的。可能最容易使用sed
:
$ seq 1 4 | sed -e '$s,$,stuff/to/append,'
1
2
3
4stuff/to/append
要sed
就地修改文件,请使用
sed -i -e '$s,$,stuff/to/append,' filename
(美元符号有两个含义。第一个$
是控制下一个命令运行哪一行的地址,这里表示最后一行。第二个$
是行尾的正则表达式表示法。)
要附加到最后一行以外的其他行,请将第一行替换$
为行号或模式匹配。这会将字符串附加到包含以下内容的任何行foo
:
sed -i -e '/foo/ s,$,stuff/to/append,' filename
请注意,我在这里使用逗号作为s
命令的分隔符。斜杠更为常见,但要添加的文本包含斜杠。该s
命令允许使用(几乎)任何字符。
如果用于查找正确行的模式中有斜杠,则可以使用类似的\,foo,
地址,即以反斜杠开头并使用任何方便的分隔符。
答案2
如果要修改现有文件,可以使用sed
命令。
假设您有要附加的字符串以及要插入该字符串的行号:
mystring=":/etc/simmerin/bin/"
lineno=10
将字符串插入到开始线路:
sed "${lineno}s,^,${mystring}," file
将字符串插入到结尾线路:
sed "${lineno}s,\$,${mystring}," file
插入字符串前该行:
sed "${lineno}s,^,${mystring}\n," file
插入字符串后该行:
sed "${lineno}s,\$,\n${mystring}," file
答案3
newline
您的文件末尾已有。换行符大小为 1 个字节:使用该truncate
命令将文件缩小 1 个字节,然后追加到文件末尾。
truncate -s -1 filename && echo ":/etc/simmerin/bin/" >> filename
答案4
使用printf代替echo,这个默认不加“\n”
请注意 printf 是 bash 的命令,因此请确保您的 shell 支持它