我有一个文件temp.txt
。这里我想用Between和关键字替换逗号 ( ,
) 。||
Select
From
select emp_name,
emp_id,
loc
from emp_join ,
emp_loc
where emp_join.id = emp_loc.id
and join_date > to_date('2015-01-01','YYYY-MM-DD')
UNION
select emp_name,
emp_id,
loc
from emp_term,
emp_loc
where emp_term.id = emp_loc.id
and term_date = to_date('2015-01-01','YYYY-MM-DD');
我正在使用sed
命令
sed 's/,/||/g' temp.txt
但它替换了文件中的所有逗号。
有没有一个简单的unix命令可以让我做到这一点?如何使用 来做到这一点sed
?
答案1
sed -e '/^select/,/^from/s/,/||/' temp.txt
答案2
root@admin:~# cat N | sed 's/\(.\+\)\,\(.\+\)/\1\|\|\2/g'
select emp_name,
emp_id,
loc
from emp_join ,
emp_loc
where emp_join.id = emp_loc.id
and join_date > to_date('2015-01-01'||'YYYY-MM-DD')
UNION
select emp_name,
emp_id,
loc
from emp_term,
emp_loc
where emp_term.id = emp_loc.id
and term_date = to_date('2015-01-01'||'YYYY-MM-DD');
答案3
和perl
:
perl -0777 -pe 's{\bselect\b.*?\bfrom\b}{$& =~ s/,/||/g}esig' < temp.txt
将在每个单词和其后的下一个单词之间替换,
为,不区分大小写(因此允许同时使用和,例如在您的问题中,但也允许,...)。我们在这些单词周围使用单词边界运算符,因此它不会匹配 in例如,但它会匹配 in or或as ,并且不是||
select
from
from
From
FROM
FrOm
\b
from
fromage
from,age
from-age
"from"
,
-
"
单词字符。