我正试图弄清楚管道问题。我的目标是这样的
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" />
这是一个简单的例子,我知道,但我认为这说明了我的问题。
好吧,我的管道走错了路,但我仍然无法理解这一点。
这是一个更简单的例子
echo 'foo:bar' | split -d ':' | replace $1 $2 -- index.html
这种命令可能吗?
如此接近!
minify css/main.css | replace $(cut -f1 -) $(cut -f2 -) index.html
这会起作用,除了由于某种原因cut不能读取STDIN :(它们在正常运行时返回正确的值但我需要它们作为替换命令的参数
答案 0 :(得分:1)
我认为你不能用单行代码来做这件事,因为你试图从两个不同的来源(管道和输入文件)读取输入。但是这样的事情可能有用:
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数组{{1} }。可以像这样访问数组元素:( ... )
${varname[index]}
在文件sed -i
中执行就地替换。如果您不想这样,请删除index.html
并将输出重定向到新文件:
-i
答案 1 :(得分:0)
IFS=: read -ra a <<<'foo:bar'
ed -s index.html <<EOF
g/${a}/s,,${a[1]}
w
EOF