리눅스에서 특정 파일을 찾아서 내용을 바꾸고 싶은 경우가 있습니다. 예를들어 아래의 language.json파일에서 vue 텍스트를 찾아 nuxt로 변경하길 원한다면 어떻게 해야할까요?
@ language.txt{
"framework": "vue"
}
위에서 vue 텍스트를 아래와 같이 변경하려고 합니다.
{
"framework": "nuxt"
}
이 경우 파일의 내용을 바꾸는 몇 가지 방법이 존재합니다. 아래는
sed 명령어를 사용하여
리눅스에서 특정 텍스트를 다른 텍스트로 바꿔보도록 하겠습니다. 또한
정규 표현식을 사용하는 방법도 함께 알아봅니다.
# 리눅스 파일 내용 바꾸기, sed
sed는 특정 파일 내에 위치한 내용에서 특정 문구를 찾아 변경할 수 있도록 도와줍니다. 이 때 간단한 문법은 아래와 같습니다.
sed option 's/targetText/replaceText/' targetFile보시면 sed 뒤에 옵션이 있고 다음의 콤마에는 / 기호로 구분된 텍스트를 입력 가능합니다. 여기서 각각 해당하는 키워드는 다음과 같이 사용됩니다.
option //
[Optional] 옵션 설정이 필요한 경우 사용함s //
텍스트를 찾아 변경함targetText //
대상이 될 텍스트replaceText //
바뀌게 될 텍스트targetFile //
대상 파일이름이제 어떻게 사용하지는 간단한 예제를 사용하여 아래에서 알아봅니다.
! sed 텍스트 변경 예제보기
몇 가지 예제를 만들고 일반적인 경우와 정규표현식을 사용한 경우 파일을 변경하는 경우 등을 각각 알아봅니다.
apple을 찾아 orange로 바꾸는 방법file.txt 파일에서 apple을 찾아 orange로 바꾸는 방법입니다.
sed 's/apple/orange/' file.txt
가장 간단한 방법입니다.
일치하는 모든 apple을 찾아 orange로 바꾸는 방법위 예제는 하나의 텍스트만 변경합니다. 전체 변경을 위해서는 바꿀 텍스트의 / 뒤에 g를 추가합니다.
sed 's/apple/orange/g' file.txt
이제 모든 apple이 orange로 변경됩니다.
파일 변경을 위해서 옵션으로 - i 플래그 사용하기-i 파일을 사용하지 않으면 파일을 저장하지는 않고 출력만 수행합니다. 실제로 파일 변경과 저장을 하려면 -i 플래그를 옵션값으로 사용합니다.
sed -i 's/apple/orange/g' file.txt
변경 사항이 출력되면서 동시에 파일이 변경된 것을 알 수 있습니다.
정규표현식 사용하여 apple 또는 banana인 경우 orange로 변경하기기본적으로 정규표현식이 사용되지만 최근의 모든 정규표현식을 적용하기 위해서는 -E 옵션이 필요합니다. 예를들어 + 기호, |(파이프라인) 기호 등을 사용하기 위해서 아래와 같이 -E 옵션을 추가해야하죠.
sed -E 's/apple|banana/orange/g' file.txt
이제 apple 또는 banana를 찾아 변경할 수 있는 파이프라인 기호 사용도 가능해졌습니다.
여기까지 리눅스에서 파일의 내용, 텍스트 변경을 위한 방법을 간략하게 알아보았습니다.