파일이 있습니다 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
그러나 파일의 모든 쉼표를 대체합니다.
이 작업을 수행할 수 있는 간단한 유닉스 명령이 있습니까? 이를 수행하는 방법은 무엇입니까 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"
,
-
"
단어 문자.