linux - 管道将输入拆分为命令

标签 linux bash unix pipe

我正在尝试找出管道问题。我的目标是这样的

replace $1 $2 index.html | split -d ':' | minify main.css

main.css 的输出在哪里

main.css:main.min.css

index.html 将从这个开始:

<link href="main.css" />

为此:

<link href="main.min.css" />

我知道这是一个简单的例子,但我认为它说明了我的问题。

  • 编辑 1

好吧,我把管道弄错了,但我还是想不通。

这里有一个更简单的例子

echo 'foo:bar' | split -d ':' | replace $1 $2 -- index.html

这样的命令可行吗?

  • 编辑 2

这么近!

minify css/main.css | replace $(cut -f1 -) $(cut -f2 -) index.html

除了由于某些原因 cut 无法读取 STDIN 外,这会起作用 :( 它们在正常运行时返回正确的值,但我需要它们作为替换命令的参数

最佳答案

我不认为你可以用单行代码来做到这一点,因为你正试图从两个不同的来源(管道和输入文件)读取输入。不过,这样的事情可能会奏效:

IFS_SAVE=$IFS
IFS=: a=( `echo "foo:bar"` )
sed -i "s/${a[0]}/${a[1]}/g" index.html
IFS=$IFS_SAVE

IFS=: 指令改变了 field separator对于以下从换行符到 : 的命令,以便嵌套的 echo 将两个字段放入 bash 数组 ( ... )。可以像这样访问数组元素:${varname[index]}

sed -i 在文件 index.html 中执行就地替换。如果你不想这样,删除 -i 并将输出重定向到一个新文件:

sed "s/${a[0]}/${a[1]}/g" index.html > output.html

关于linux - 管道将输入拆分为命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040430/

相关文章:

linux - Until 循环不终止或保持增量变量的值

c - 只在一个 child 上 fork 的 Unix fork 树

linux - 需要减少执行时间

c - 在驻留在不同套接字上的处理器之间共享数据的最快方法

linux - 查看同一用户在其他终端输入命令的历史记录

linux - 从 Centos 6.7 升级到 7 而不会损害 LVM 中的数据

regex - 正则表达式 : bash 3 vs bash 4

unix - unix 机器上的缓存内存不断增长

linux - 在 Linux 中一个接一个地调度作业

MySQL 表损坏