텍스트 파일에서 발견된 정규식 패턴이 나타날 때마다 공백을 추가하고 싶습니다.
예:
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
"1 -2" 또는 "2 - 4"를 일치시키고 싶습니다. 나는 다음과 같은 패턴을 생각해 냈습니다.
[0-9]\s-\s[0-9]
이제 다음과 같이 각 일치 항목에 공백을 추가하고 싶습니다.
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
답변1
다음과 같은 도구를 사용하면 쉽습니다 sed
.
$ sed 's/[0-9]\s-\s[0-9]/& /' file
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
이 연산자는 입력 파일의 각 줄에서 s/foo/bar/
처음 나타나는 부분을 대체합니다 foo
. bar
맞추고 싶다면모두행이 주어지면 g
: 을 사용하십시오 s/foo/bar/g
. 이는 &
"일치하는 콘텐츠"이므로 s/[0-9]\s-\s[0-9]/& /
처음 나타나는 정규식은 일치하는 콘텐츠에 공백을 더한 내용으로 대체됩니다.
탭이나 다른 공백이 아닌 단일 공백만 일치시키는 경우에는 공백을 사용할 이유가 없습니다 \s
.
sed 's/[0-9] - [0-9]/& /' file
마지막으로, 파일 자체를 변경하려면 다음을 사용하십시오. -i
(이것은 GNU 를 가정하고 sed
구문은 다른 구현에서 약간 다릅니다. 또한 파일을 sed 작업의 결과로 대체합니다. 추가하기 전에 필요한 작업을 수행하는지 확인하십시오 -i
. ) :
sed -i 's/[0-9] - [0-9]/& /' file