0

我试图找出管道问题。我的目标是这样的

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 :( 它们在正常运行时返回正确的值,但我需要它们作为替换命令的参数

4

2 回答 2

1

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

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

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

sed -i在文件中进行就地替换index.html。如果您不希望这样,请删除-i并将输出重定向到新文件:

sed "s/${a[0]}/${a[1]}/g" index.html > output.html
于 2012-10-23T23:18:01.663 回答
0
IFS=: read -ra a <<<'foo:bar'
ed -s index.html <<EOF
g/${a}/s,,${a[1]}
w
EOF
于 2012-10-24T07:43:18.370 回答