使用 sed 如何替换特定字符串之前的逗号

使用 sed 如何替换特定字符串之前的逗号

我有一个文件temp.txt。这里我想用Between和关键字替换逗号 ( ,) 。||SelectFrom

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 ,并且不是||selectfromfromFromFROMFrOm\bfromfromagefrom,agefrom-age"from",-"单词字符

相关内容