웹사이트 검색

Linux의 Bash에서 문자열을 조작하는 방법


Linux에 잘 갖춰진 것이 하나 있다면 문자열을 조작하기 위한 유틸리티입니다. 그러나 Bash 셸에도 바로 내장된 전체 기능 세트가 있습니다. 사용 방법은 다음과 같습니다.

문자열 조작

Linux 에코시스템은 텍스트 및 문자열 작업을 위한 환상적인 도구로 가득 차 있습니다. 여기에는 awk, grep, sed 및 cut이 포함됩니다. 무거운 텍스트 랭글링의 경우 이러한 항목을 선택해야 합니다.

하지만 때때로 셸의 내장 기능을 사용하는 것이 편리합니다. 특히 짧고 간단한 스크립트를 작성할 때 그렇습니다. 스크립트를 다른 사람과 공유하고 다른 사람의 컴퓨터에서 실행할 경우 표준 Bash 기능을 사용하면 다른 유틸리티의 존재나 버전에 대해 궁금해할 필요가 없습니다.

전용 유틸리티의 기능이 필요한 경우 꼭 사용하십시오. 그것이 그들이 있는 이유입니다. 그러나 종종 스크립트와 Bash가 자체적으로 작업을 완료할 수 있습니다.

Bash 내장이기 때문에 스크립트나 명령줄에서 사용할 수 있습니다. 터미널 창에서 사용하는 것은 명령의 프로토타입을 만들고 구문을 완벽하게 만드는 빠르고 편리한 방법입니다. 편집, 저장, 실행 및 디버그 주기를 방지합니다.

문자열 변수 생성 및 작업

변수를 선언하고 문자열을 할당하는 데 필요한 것은 변수 이름을 지정하고 등호 =를 사용하고 문자열을 제공하는 것입니다. 문자열에 공백이 있으면 작은따옴표 또는 큰따옴표로 묶습니다. 등호 양쪽에 공백이 없는지 확인하십시오.

my_string="Hello, How-To Geek World."
echo $my_string

변수를 생성하면 해당 변수 이름이 셸의 탭 완성 단어 목록에 추가됩니다. 이 예에서 my_를 입력하고 Tab 키를 누르면 명령줄에 전체 이름이 입력됩니다.

읽기 전용 변수

변수 선언에 사용할 수 있는 declare 명령이 있습니다. 간단한 경우에는 실제로 필요하지 않지만 이를 사용하면 일부 명령 옵션을 사용할 수 있습니다. 아마도 가장 많이 사용하는 것은 -r(읽기 전용) 옵션일 것입니다. 이렇게 하면 변경할 수 없는 읽기 전용 변수가 생성됩니다.

declare -r read_only_var="This is an immutable string!"

새 값을 할당하려고 하면 실패합니다.

read_only_var="A new string..."

터미널 창에 쓰기

echo 또는 printf를 사용하여 터미널 창에 여러 문자열을 써서 마치 하나의 문자열처럼 보이도록 할 수 있습니다. 또한 자체 문자열 변수에 국한되지 않고 환경 변수를 명령에 통합할 수 있습니다.

user_account="Your user account is:"
echo $user_account $USER

문자열 연결

더하기 등호 연산자인 +=를 사용하면 두 문자열을 함께 '추가'할 수 있습니다. 연결이라고 합니다.

user_account="Your user account is:"
user_account+=$USER
echo $user_account

연결된 문자열 사이에는 공백이 자동으로 추가되지 않습니다. 공백이 필요한 경우 첫 번째 문자열의 끝이나 두 번째 문자열의 시작 부분에 공백을 명시적으로 넣어야 합니다.

user_account="Your user account is: "
user_account+=$USER
echo $user_account

사용자 입력 읽기

내용이 선언의 일부로 정의된 문자열 변수를 생성할 뿐만 아니라 사용자 입력을 문자열 변수로 읽을 수 있습니다.

read 명령은 사용자 입력을 읽습니다. -p(프롬프트) 옵션은 터미널 창에 프롬프트를 씁니다. 사용자 입력은 문자열 변수에 저장됩니다. 이 예에서 변수는 user_file입니다.

read -p "Open which file? " user_file
echo $user_file

입력을 캡처하기 위해 문자열 변수를 제공하지 않으면 여전히 작동합니다. 사용자 입력은 REPLY라는 변수에 저장됩니다.

read -p "Open which file? "
echo $REPLY

일반적으로 고유한 변수를 제공하고 의미 있는 이름을 지정하는 것이 더 편리합니다.

문자열 조작

이제 문자열이 생성 시 정의되었는지, 사용자 입력에서 읽었는지 또는 문자열을 연결하여 생성되었는지 여부에 관계없이 문자열을 사용하여 작업을 시작할 수 있습니다.

문자열 길이 찾기

문자열의 길이를 아는 것이 중요하거나 유용한 경우 변수 이름 앞에 해시 # 기호를 붙여서 얻을 수 있습니다.

my_string="There are 39 characters in this string."
echo ${#my_string}

문자 오프셋으로 하위 문자열 추출

문자열 내의 시작점과 선택적 길이를 제공하여 문자열 변수에서 하위 문자열을 추출할 수 있습니다. 길이를 제공하지 않으면 하위 문자열은 시작 지점부터 마지막 문자까지 모든 것을 포함합니다.

시작점과 길이는 변수 이름 뒤에 콜론 :가 있습니다. 문자열 변수의 문자는 0부터 시작하여 번호가 매겨집니다.

long_string="Frankenstein or the Modern Prometheus"
substring=${long_string:0:12}
echo $substring
echo ${long_string:27}

다른 변형을 사용하면 문자열의 끝 부분에서 여러 글자를 버릴 수 있습니다. 효과적으로 시작점을 설정하고 음수를 길이로 사용할 수 있습니다. 하위 문자열은 음수로 지정한 문자 수를 뺀 시작 지점부터 문자열 끝까지의 문자를 포함합니다.

my_string="alphabetical"
echo ${my_string:5:-4}

모든 경우에 원래 문자열 변수는 그대로 유지됩니다. 추출된 하위 문자열은 변수의 내용에서 실제로 제거되지 않습니다.

구분 기호로 하위 문자열 추출

문자 오프셋 사용의 단점은 추출하려는 하위 문자열이 문자열 내 어디에 있는지 미리 알아야 한다는 것입니다.

문자열이 반복되는 문자로 구분되어 있으면 문자열에서 하위 문자열이 어디에 있는지, 얼마나 긴지 몰라도 하위 문자열을 추출할 수 있습니다.

문자열 앞에서 검색하려면 이중 퍼센트 기호(%%), 구분 문자 및 별표(*)가 있는 변수 이름을 따릅니다. 이 문자열의 단어는 공백으로 구분됩니다.

long_string="first second third fourth fifth"
echo ${long_string%%' '*}

이것은 구분 문자를 포함하지 않는 문자열의 앞부분에서 첫 번째 하위 문자열을 반환합니다. 이를 짧은 하위 문자열 옵션이라고 합니다.

긴 하위 문자열 옵션은 마지막으로 구분된 하위 문자열까지 문자열의 앞 부분을 반환합니다. 즉, 마지막으로 구분된 하위 문자열을 생략합니다. 구문상 유일한 차이점은 명령에서 단일 퍼센트 기호 %를 사용한다는 것입니다.

long_string="first second third fourth fifth"
echo ${long_string%' '*}

예상대로 문자열의 끝에서 같은 방식으로 검색할 수 있습니다. 퍼센트 기호 대신 해시 # 기호를 사용하고 명령에서 별표 * 로 구분 기호를 이동합니다. .

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string##*.}

이것은 짧은 하위 문자열 옵션으로 구분 기호가 포함되지 않은 문자열 뒤에서 찾은 첫 번째 하위 문자열을 잘라냅니다.

long_string="this.long.string.of.words.is.delimited.by.periods"
echo ${long_string#*.}

긴 하위 문자열 옵션은 문자열의 앞부분에서 첫 번째 구분 기호까지 문자열의 뒷부분을 반환합니다. 즉, 구분된 첫 번째 하위 문자열을 생략합니다.

하위 문자열 대체

하위 문자열을 다른 하위 문자열로 바꾸는 것은 쉽습니다. 형식은 문자열의 이름, 대체될 하위 문자열 및 삽입될 하위 문자열이며 슬래시 / 문자로 구분됩니다.

string="blue pig giggles"
echo ${string/pig/goat}

검색을 문자열의 끝으로 제한하려면 검색 문자열 앞에 퍼센트 기호 % 문자를 추가합니다.

string="blue pig giggles"
echo ${string/%giggles/chuckles}

검색을 문자열의 시작 부분으로 제한하려면 검색 문자열 앞에 해시 '#' 문자를 추가합니다.

string="blue pig giggles"
echo ${string/#blue/yellow}

문자열은 유연한 것입니다

문자열이 원하는 대로 또는 필요로 하지 않는 경우 이러한 도구를 사용하여 필요에 맞게 다시 포맷할 수 있습니다. 복잡한 변환의 경우 전용 유틸리티를 사용하지만 사소한 조정의 경우 셸 내장을 사용하고 외부 도구를 로드하고 실행하는 오버헤드를 피하십시오.