我有一个包含2行的文件文件名:
2018-Feb-22 06:02:01.1234|AVC-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|
2018-Feb-22 07:02:01.1234|BCV-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|
我想连结字符串
"Warning: Time elapsed:,3444, is smaller than Name2:44222"
在与
相等的行的末尾Var1="2018-Feb-22 06:02:01.1234|AVC-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|"
或具有以下模式
Var2="2018-Feb-22 06:02:01.1234|AVC-00123HHGF
|"
然后文件名将包含
2018-Feb-22 06:02:01.1234|AVC-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|"Warning: Time elapsed:,3444, is smaller than Name2:44222"
2018-Feb-22 07:02:01.1234|BCV-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|
这就是我尝试过的:
Var3='2018-Feb-22 06:02:01.1234|AVC-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|"Warning: Time elapsed:,3444, is smaller than Name2:44222"'
sed -i 's/'"$Var1"'/'"$Var3"'/' filename
sed -i "s/$Var1/$Var3/" filename
Var4='"Warning: Time elapsed:,3444, is smaller than Name2:44222"'
sed -i "/$Var1/a $Var4" filename
但没有任何反应。甚至没有错误。 还有其他方法吗?我需要在文件名中保持相同的行顺序。
更新:我已经放弃了使用sed并尝试了一个不太理想的解决方案,但它确实有效。
我有2个文件: File_to_change File_with_lines_to_add
While read line; do
Prkey=##calculate pk
N=0
While read linetoadd; do
Prmkey=##calculate pk
If [ "$Prkey" =="$Prmkey" ]; then
N=1
echo "$line$linetoadd">>outfile
Fi
Done < File_with_lines_to_add
If [ "$N" == "0" ]; then
echo "$line">>outfile
Fi
Done < File_to_change
答案 0 :(得分:0)
试试这个:
sed -i '' '/2018-Feb-22 06:02:01.1234|AVC-00123HHGF|/s/$/\"Warning: Time elapsed:,3444, is smaller than Name2:44222\"/' gilename
如果这不起作用,退回到更简单的事情,告诉我们当您尝试这样做时会发生什么:
sed 's/2018/XXXX/' filename
答案 1 :(得分:0)
suffix="Warning: Time elapsed:,3444, is smaller than Name2:44222"
pattern="AVC-"
sed -E "/$pattern/s/^(.*)$/\1$suffix/" filename
2018-Feb-22 06:02:01.1234|AVC-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|Warning: Time elapsed:,3444, is smaller than Name2:44222
2018-Feb-22 07:02:01.1234|BCV-00123HHGF|427654|Default|Name1 [1]|2334|2344444|(00:00:00.45567)|
请注意,许多关键字(更好的关键字符,因为它们中的大多数只有1个字符长)通过上下文更改其含义,引用很重要,并且标记如-E,-i,-r。
例如,$可以由shell解释,但是如果没有触及,则可以表示&#39;行结束&#39;或者&#39;最后一行&#39;或者&#39;美元符号&#39;
&#39; +&#39;可以表示至少一个,&#39;。可以表示任何字符&#39;,\
用于在sed中屏蔽,以引入像\ 1这样的引用。这是一个群众,但学习非常有用。
小心使用sed。
&#34; 34 | AVC-00123HHGF | 42&#34;将由sed als替代解释,4或A和F或4.所以这将匹配:
&#34; 34VC-00123 ...&#34; &#34; 3AVC-00123 ..&#34; &#34; ... HHGF2&#34; &#34; ... HHG42&#34;
这使得2x2替代品的4种组合,它们都不匹配&#34; 34 | AVC-00123HHGF | 42&#34;。怎么处理?好掩盖:
&#34; 34 \ | AVC-00123HHGF \ | 42&#34;
这可能会被其他sed程序再次完成,但你猜测它会导致什么。
&#34; 34.AVC-00123HHGF.42&#34;会匹配,所以做出合理的偏执决定,测试和控制。 :)