CLI 한 줄 명령어로 파일을 제자리에서 편집하기

Bash:
CLI 한 줄 명령어로 파일을 제자리에서 편집하기

방법:

Bash를 사용하여 파일을 제자리에서 편집할 때, 주로 sedawk라는 두 가지 중요한 도구가 사용됩니다. 이 강력한 유틸리티들을 사용하는 방법을 몇 가지 코딩 예제와 함께 알아봅시다.

단순 텍스트 대체를 위한 sed 사용

다음 명령은 file.txt에서 “text1"의 첫 번째 발생을 “text2"로 대체합니다:

sed -i 's/text1/text2/' file.txt

모든 발생을 대체하려면 (전역 대체), 끝에 g를 추가합니다:

sed -i 's/text1/text2/g' file.txt

여러 파일을 한 번에 수정하려면:

sed -i 's/text1/text2/g' file1.txt file2.txt file3.txt

보다 복잡한 조작을 위한 awk 사용

awk는 특히 필드 기반 데이터를 처리하는 텍스트 처리에 유용한 프로그래밍 기능으로 빛나는 또 다른 도구입니다.

쉼표로 구분된 data.csv에서 각 줄의 두 번째 필드를 newValue로 변경:

awk -i inplace -F, '{$2="newValue"; print $0}' OFS=, data.csv

뛰어들기 전에 백업하기

하나의 실용적인 조언: 제자리에서 편집하기 전에 항상 백업을 만드세요. sed는 백업을 생성하기 위해 -i 옵션 뒤에 접미사를 사용할 수 있게 해줍니다.

sed -i.bak 's/text1/text2/g' file.txt

이 명령은 대체를 수행하기 전에 원본 file.txt의 백업으로 file.txt.bak을 생성합니다.

심층 분석

명령 줄에서 직접 파일을 편집하는 능력은 Unix 철학의 자연스러운 진전으로 나타났습니다: 사용자들이 가능한 한 적은 키 입력으로 데이터를 효율적으로 관리하고 조작할 수 있게 하는 것입니다. 그러나, 이러한 능력은 그것이 수반하는 경고들을 가집니다.

역사적 맥락

Unix 도구인 sedawk는 Unix 초기부터 있었으며, 특화된, 조합 가능한 명령어에 중점을 둔 그것의 툴킷 철학의 일부로 제작되었습니다. 그것이 Unix의 무기고에 포함된 것은 명령 줄 인터페이스가 지배하는 환경에서 효율적인 텍스트 처리를 위한 필요에 대한 응답이었습니다.

대안

sedawk는 강력하지만, 유일한 옵션은 아닙니다. 예를 들어, Perl과 Python은 비슷한 제자리에서 편집 기능을 허용하는 명령 줄 옵션(-p-i로 각각)을 가집니다. 복잡한 작업에 대해 더 읽기 쉬운 문법을 제공합니다.

perl -pi -e 's/text1/text2/g' file.txt
python -c "import fileinput, sys; [sys.stdout.write(line.replace('text1', 'text2')) for line in fileinput.input(files='file.txt', inplace=True)]"

각 대안에는 강점이 있습니다: Perl의 한 줄짜리 기능이 엄청나고, Python의 문법이 Unix 텍스트 처리 도구에 깊이 정통하지 않은 사람들에게 접근하기 더 쉽다고 할 수 있습니다.

구현 세부사항

기술적인 의미에서 제자리 편집은 정말로 “제자리에서” 이루어지지 않습니다. sed -iawk -i inplace 모두 처리된 출력이 저장되기 전에 원본 파일을 대체하는 임시 파일을 생성합니다. 이 접근 방식은 프로세스가 중단될 경우 파일이 손상되지 않도록 보장합니다. 이것이 주로 리소스와 권한에 관한 함축이 있습니다: 대상 파일의 디렉토리에서 파일을 생성할 수 있는 권한과 임시 파일에 필요한 충분한 디스크 공간이 있어야 합니다.

강력하지만, 제자리 편집 명령은 주의해서 사용해야 합니다. 잘못 배치된 정규 표현식은 데이터 손실로 이어질 수 있으며, 백업의 중요성을 강조합니다. 잠재적인 함정에도 불구하고, 이 명령들을 마스터하면 명령 줄에서 직접 빠르고 효율적인 파일 수정을 수행할 수 있는 능력이 크게 향상되어, 복잡한 작업을 수행하기 위해 간단하고 강력한 도구를 활용하는 Unix 철학을 구현합니다.