我正在寻找用“ todolist.append(item)
”替换“_
”符号的解决方案。
-
并且在更换后它应该如下所示:
383 =>.
array (
'url' => 'order-samsung_s5-online-en.html',
'module' => 'product',
'action' => 'get',
'oid' => '14',
'lang' => 'en'
文本文件中可能还有其他下划线(“ 383 =>.
array (
'url' => 'order-samsung-s5-online-en.html',
'module' => 'product',
'action' => 'get',
'oid' => '14',
'lang' => 'en'
”)符号,但只能在_
和'url' => 'order-
之间的网址中进行替换。
答案 0 :(得分:1)
这是一个awk
的解决方案,它只替换两个字符串之间的字符。我假设第一个总是在行的开头。
awk '/^(\047)url(\047) => (\047)order-/ {
i=index($0,"-online")
interesting=substr($0,0,i-1)
gsub(/_/,"-",interesting)
$0=interesting substr($0,i)
} 1' file
\047
)是用于转义的单引号的八进制值。index()
返回行中字符串的第一次出现的索引(如果未找到,则返回零)substr()
直到此索引给出有趣的部分gsub()
替换字符串中的字符并将结果分配给它。1
打印行测试文件
some_text
'url' => 'order-word_word1-online-es.html',
'url' => 'order-word_word1_word2-online-es.html',
'url' => 'order-word_word1_word2_word3-online-es.html', some_text
some_text
'url' => 'order-word_offline.html'
输出
some_text
'url' => 'order-word-word1-online-es.html',
'url' => 'order-word-word1-word2-online-es.html',
'url' => 'order-word-word1-word2-word3-online-es.html', some_text
some_text
'url' => 'order-word_offline.html'
答案 1 :(得分:1)
使用sed,您可以使用t
(测试)命令处理字符串之间找到的所有_
。
当替换成功时,ta
将循环到脚本的开头(:a
)以搜索并替换剩余的_
:
sed ":a;s/\('url' => 'order-[^_]*\)_\(.*-online\)/\1-\2/;ta;" file
答案 2 :(得分:0)
我能做的最近的就是:
grep -i "^'url' => 'order-" t.txt | sed -e 's/\([[:alnum:]]*\)[_]/\1-/g'
这需要grep来查找以。开头的行 'url'=> '订购- 这将替换此行中的每个下划线。这不会停止 -online
答案 3 :(得分:0)
如果我理解了这个要求,你可以试试这个sed
sed -E '/order/!b;s//&\n/;s/online/\n&/;h;s/\n.*\n/\n/;x;s/[^\n]*\n([^\n]*).*/\1/;s/_/-/g;x;G;s/([^\n]*)\n([^\n]*)\n(.*)/\1\3\2/' infile
首先在包含订单的行上将订单和在线文本分开。
在此行上操作从_到 - 的替换。
重新排列整行。
cat infile
383 =>.
array (
'url' => 'order-samsung_s5-online-en.html',
'module' => 'product',
'action' => 'get',
'oid' => '14',
'lang' => 'en'
输出
383 =>.
array (
'url' => 'order-samsung-s5-online-en.html',
'module' => 'product',
'action' => 'get',
'oid' => '14',
'lang' => 'en'