echo 附加到现有行,继续该行

echo 附加到现有行,继续该行

如何使用 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 支持它

相关内容