什么是在bash中修改文件的优雅方式

时间:2017-10-09 09:10:57

标签: bash awk sed

我想将命令输出传递给特定位置的某个文件。

我们将命令命名为 com ,输出为:

auto -> 123
beta -> 456
something -> 789

如何将其传递给文件:

.........
blablabla

auto 
beta
something

blablabla
.........

像这样:

.........
blablabla

auto = 123
beta = 456
something = 789

blablabla
.........

如何在终端的一行上进行:(仅为结构示例)

ubuntu@ubuntu:~$ com > file

什么是优雅的方式? (sed,awk,我不知道)

2 个答案:

答案 0 :(得分:1)

为{em> sed

创建com创建脚本文件

来自man sed

-f script-file, --file=script-file

      add the contents of script-file to the commands to be executed

以这种格式制作节目输出规则

s/auto/& = 123/
s/beta/& = 456/
s/something/& = 789/

如果您已在auto -> 123上修复,则可以使用

进行修改
com | sed -r 's#(\S+) -> (.*)#s/\1/\& = \2/#'

然后你可以用它作为

com | sed -f- file

com | sed -r 's#(\S+) -> (.*)#s/\1/\& = \2/#' | sed -f- file

答案 1 :(得分:0)

我会直接使用awk和echo。 例如:

存储在output.log中的命令输出:

a -> 123
b -> 456
c -> 789

可能的单行解决方案:

echo "$(cat output.log | head -1 | awk '{print $1}') = $(cat output.log | head -1 | awk '{print $3}')"

哪个应该导致“a = 123”。

如果你知道output.log中项目的确切位置,这是有效的。

您甚至可以设置一个while循环来自动读取整个文件。