Linux의 Bash에서 문자열을 조작하는 방법
게시 됨: 2022-07-28Linux에 잘 갖춰진 것이 한 가지 있다면 문자열을 조작하기 위한 유틸리티입니다. 그러나 Bash 셸에 바로 내장된 전체 기능 세트도 있습니다. 사용 방법은 다음과 같습니다.
문자열 조작
Linux 에코시스템은 텍스트 및 문자열 작업을 위한 환상적인 도구로 가득 차 있습니다. 여기에는 awk, grep, sed 및 cut이 포함됩니다. 무거운 텍스트 랭글링의 경우 이것이 선택해야 합니다.
그러나 때때로, 특히 짧고 간단한 스크립트를 작성할 때 셸의 내장 기능을 사용하는 것이 편리합니다. 스크립트가 다른 사람들과 공유되고 그들의 컴퓨터에서 실행될 경우 표준 Bash 기능을 사용하면 다른 유틸리티의 존재 또는 버전에 대해 궁금해할 필요가 없습니다.
전용 유틸리티의 힘이 필요하면 반드시 사용하십시오. 그것이 그들이 거기에있는 이유입니다. 그러나 종종 스크립트와 Bash가 자체적으로 작업을 완료할 수 있습니다.
Bash에 내장되어 있기 때문에 스크립트나 명령줄에서 사용할 수 있습니다. 터미널 창에서 사용하는 것은 명령의 프로토타입을 만들고 구문을 완성하는 빠르고 편리한 방법입니다. 편집, 저장, 실행 및 디버그 주기를 피합니다.
문자열 변수 생성 및 작업
변수를 선언하고 문자열을 할당하기 위해 필요한 것은 변수 이름을 지정하고 등호 =
를 사용하고 문자열을 제공하는 것입니다. 문자열에 공백이 있으면 작은따옴표나 큰따옴표로 묶습니다. 등호 양쪽에 공백이 없는지 확인하십시오.
my_string="Hello, How-To Geek World."
에코 $my_string
변수를 생성하면 해당 변수 이름이 셸의 탭 완성 단어 목록에 추가됩니다. 이 예에서 "my_"를 입력하고 "Tab" 키를 누르면 명령줄에 전체 이름이 입력됩니다.
읽기 전용 변수
변수 선언에 사용할 수 있는 declare
명령이 있습니다. 간단한 경우에는 실제로 필요하지 않지만 이를 사용하면 명령의 일부 옵션을 사용할 수 있습니다. 아마도 가장 많이 사용하는 것은 -r
(읽기 전용) 옵션일 것입니다. 이렇게 하면 변경할 수 없는 읽기 전용 변수가 생성됩니다.
선언 -r read_only_var="이것은 변경할 수 없는 문자열입니다!"
새 값을 할당하려고 하면 실패합니다.
read_only_var="새 문자열..."
터미널 창에 쓰기
echo 또는 printf를 사용하여 터미널 창에 여러 문자열을 작성하여 하나의 문자열인 것처럼 표시할 수 있습니다. 그리고 우리는 우리 자신의 문자열 변수에 국한되지 않고 환경 변수를 명령에 통합할 수 있습니다.
user_account="귀하의 사용자 계정:"
echo $user_account $USER
문자열 연결
더하기-등호 연산자인 +=
를 사용하면 두 문자열을 함께 "추가"할 수 있습니다. 결합이라고 합니다.
user_account="귀하의 사용자 계정:"
user_account+=$USER
에코 $user_account
연결된 문자열 사이에는 자동으로 공백이 추가되지 않습니다. 공백이 필요한 경우 첫 번째 문자열의 끝이나 두 번째 문자열의 시작 부분에 명시적으로 공백을 넣어야 합니다.
user_account="귀하의 사용자 계정: "
user_account+=$USER
에코 $user_account
관련: Linux의 Bash에서 환경 변수를 설정하는 방법
사용자 입력 읽기
내용이 선언의 일부로 정의된 문자열 변수를 생성할 뿐만 아니라 사용자 입력을 문자열 변수로 읽을 수 있습니다.
read
명령은 사용자 입력을 읽습니다. -p
(프롬프트) 옵션은 터미널 창에 프롬프트를 씁니다. 사용자의 입력은 문자열 변수에 저장됩니다. 이 예에서 변수는 user_file
이라고 합니다.
read -p "어떤 파일을 여시겠습니까?" user_file
에코 $user_file
입력을 캡처하기 위해 문자열 변수를 제공하지 않으면 여전히 작동합니다. 사용자 입력은 REPLY
라는 변수에 저장됩니다.
read -p "어떤 파일을 여시겠습니까?"
에코 $REPLY
일반적으로 고유한 변수를 제공하고 의미 있는 이름을 지정하는 것이 더 편리합니다.
문자열 조작
생성 시 정의된 문자열이든, 사용자 입력에서 읽든, 문자열을 연결하여 만든 문자열이든 관계없이 이제 문자열을 사용하여 작업을 시작할 수 있습니다.
문자열 길이 찾기
문자열의 길이를 아는 것이 중요하거나 유용한 경우 변수 이름 앞에 해시 " #
" 기호를 붙여서 얻을 수 있습니다.
my_string="이 문자열에는 39개의 문자가 있습니다."
에코 ${#my_string}
문자 오프셋으로 부분 문자열 추출하기
문자열 내의 시작점과 선택적 길이를 제공하여 문자열 변수에서 부분 문자열을 추출할 수 있습니다. 길이를 제공하지 않으면 하위 문자열에 시작 지점부터 마지막 문자까지의 모든 항목이 포함됩니다.
시작점과 길이는 변수 이름 뒤에 오고 그 사이에는 콜론 " :
"이 있습니다. 문자열 변수의 문자는 0 부터 시작하여 번호가 매겨집니다.
long_string="프랑켄슈타인 또는 현대의 프로메테우스"
하위 문자열=${long_string:0:12}
에코 $하위 문자열
에코 ${long_string:27}
또 다른 변형을 사용하면 문자열의 꼬리 끝에서 여러 글자를 버릴 수 있습니다. 효과적으로 시작점을 설정하고 음수를 길이로 사용할 수 있습니다. 하위 문자열에는 음수에 지정한 문자 수를 뺀 문자열의 시작점부터 끝까지의 문자가 포함됩니다.
my_string="알파벳"
에코 ${my_string:5:-4}
모든 경우에 원래 문자열 변수는 변경되지 않습니다. "추출된" 부분 문자열은 실제로 변수 내용에서 제거되지 않습니다.
구분 기호로 부분 문자열 추출
문자 오프셋을 사용할 때의 단점은 추출하려는 부분 문자열이 문자열 내 어디에 있는지 미리 알아야 한다는 것입니다.
문자열이 반복되는 문자로 구분되는 경우 문자열의 위치나 길이를 모른 채 부분 문자열을 추출할 수 있습니다.
문자열 앞에서 검색하려면 변수 이름 뒤에 이중 퍼센트 기호 %%
, 구분 문자 및 별표 *
를 입력하십시오. 이 문자열의 단어는 공백으로 구분됩니다.
long_string="첫 번째 두 번째 세 번째 네 번째 다섯 번째"
에코 ${long_string%%' '*}
이것은 구분 문자를 포함하지 않는 문자열 앞의 첫 번째 부분 문자열을 반환합니다. 이것을 짧은 부분 문자열 옵션이라고 합니다.
긴 부분 문자열 옵션은 마지막으로 구분된 부분 문자열까지 문자열의 앞부분을 반환합니다. 즉, 마지막으로 구분된 하위 문자열을 생략합니다. 구문상 유일한 차이점은 명령에서 단일 백분율 기호 " %
"를 사용한다는 것입니다.
long_string="첫 번째 두 번째 세 번째 네 번째 다섯 번째"
에코 ${long_string%' '*}
예상대로 문자열 끝에서 동일한 방식으로 검색할 수 있습니다. 백분율 기호 대신 해시 " #
" 기호를 사용하고 구분 기호를 명령에서 별표 " *
" 뒤에 오도록 이동합니다.
long_string="this.long.string.of.words.is.delimited.by.periods"
에코 ${long_string##*.}
이것은 짧은 부분 문자열 옵션으로, 구분 기호를 포함하지 않는 문자열의 뒤에서 찾은 첫 번째 부분 문자열을 잘라냅니다.
long_string="this.long.string.of.words.is.delimited.by.periods"
에코 ${long_string#*.}
긴 부분 문자열 옵션은 문자열의 앞부분에서 첫 번째 구분 기호까지 문자열의 뒷부분을 반환합니다. 즉, 구분된 첫 번째 부분 문자열을 생략합니다.
부분 문자열 대체
하위 문자열을 다른 하위 문자열로 바꾸는 것은 쉽습니다. 형식은 문자열의 이름, 대체될 하위 문자열 및 삽입될 하위 문자열이며 슬래시 " /
" 문자로 구분됩니다.
string="파란 돼지 킥킥"
에코 ${문자열/돼지/염소}
검색을 문자열 끝으로 제한하려면 검색 문자열 앞에 백분율 기호 " %
" 문자를 추가합니다.
string="파란 돼지 킥킥"
echo ${string/%giggles/chuckles}
검색을 문자열의 시작 부분으로 제한하려면 검색 문자열 앞에 해시 " #
" 문자를 사용합니다.
string="푸른 돼지 킥킥"
에코 ${문자열/#파란색/노란색}
문자열은 유연한 것입니다
문자열이 원하는 대로 또는 필요한 것이 아닌 경우 이러한 도구를 사용하여 필요에 맞게 다시 형식을 지정할 수 있습니다. 복잡한 변환의 경우 전용 유틸리티를 사용하지만 사소한 조정의 경우 셸 내장을 사용하고 외부 도구를 로드하고 실행하는 오버헤드를 방지합니다.
관련: Linux의 inode에 대해 알고 싶었던 모든 것