ファイルがあります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
,
各単語とその後の次の単語の間は大文字と小文字を区別しないものに置き換えられます(したがって、あなたの質問のようにandの両方を使用できますが、...も使用できます)。これらの単語の周りに単語境界演算子を使用するため、たとえば一致しませんが、inまたはor asでは一致しますが、一致しません。||
select
from
from
From
FROM
FrOm
\b
from
fromage
from,age
from-age
"from"
,
-
"
単語文字。