【发布时间】:2016-09-02 06:29:58
【问题描述】:
注意: 这个问题看起来像previously posted one,但正如cmets中提到的,它原来是chameleon question. 我接受了答案,我在这里发布了同样的问题,但“解决方案条件”略有不同。
我有一个像这样的文件test.txt(但包含更多行)
/foo/bar/how /SOME_TEXT_HERE/hello
/foo/bar/are hello/SOME_OTHER_TEXT
/foo/bar/you hello
我想得到这个输出:
/foo/bar/how /SOME_TEXT_HERE/how
/foo/bar/are are/SOME_OTHER_TEXT
/foo/bar/you you
我试过这个:
while read line
do
bla=$(echo $line | cut -f4 -d"/" | cut -f1 -d" ")
sed -i "s/hello/$bla/" test.txt
done <test.txt
但是输出是:
/foo/bar/how /SOME_TEXT_HERE/how
/foo/bar/are how/SOME_OTHER_TEXT
/foo/bar/you how
注意:
我想要解决方案:
允许我定义一个变量(此处为
bla),我将手动定义该变量,并且从一个文件到另一个文件不同(因此不使用基本字段位置之类的东西),而是使用cut或其他命令和我的例子一样)用这个变量替换行中其他地方的特定字符串(所以不是像
$2这样的字段位置,而是像s/hello/$bla这样的字段位置)
虽然我不确定这是否可能(显然我不知道如何自己做到这一点......),但感谢您的时间尝试! :)
【问题讨论】:
-
你没有接受我在上一个问题中给你的建议。您的示例输入仍然是晴天,彩虹和蝴蝶是您之前拥有的,因此,例如,仍然没有不包含
hello的行,没有在行中多次包含它的行(/foo/hello/how hello),没有包含它作为最后一个字段 (/foo/bar/how chellogram) 或 RE 元字符或空格的一部分的行,或者您需要在示例输入中涵盖的十几个其他内容中的任何一个,或者您获得的解决方案在它们出现在您的真实输入。 思考并展示最坏的情况。 -
请发[ mcve ]。
-
这里有 3 个提示 1.
echo "str" | sed 's/t/T'2.grymoire.com/Unix/sed.html(请阅读sed教程)。 3.你不需要你的复杂$(echo ... | cut | cut )。这是非常低效的,尤其是对于大文件。还有...... ED 和 sjsam 说了什么!祝你好运。 -
@Ed Morton 我编辑了它。这是我的数据中可能遇到的最坏情况。
-
@tlorin 不,不是。例如,它不包括
/foo/bar/are hello/hello,也不包括/foo/bar/are chellogram,也不包括/foo/bar/a&b hello(注意反向引用),也不包括你想要替换hello而不是foo.bar(注意RE元字符)的情况,也不包括@ 987654345@,等等,等等……祝你好运。