공백 다음에 단일 문자를 얻는 방법은 무엇입니까?

공백 다음에 단일 문자를 얻는 방법은 무엇입니까?

아래 출력을 어떻게 얻을 수 있습니까? 첫 번째 필드를 그대로 유지하고 공백 뒤에 문자를 추가하고 싶습니다.

echo "Hello world"
Hellow

세 번째 필드도 있는 경우 세 번째 필드의 시작 문자가 출력에 나타나야 합니다.

echo "hello world unix"
hellou

답변1

sed를 사용하세요:

편집하다:으로 개선되었습니다글렌 잭맨, 감사해요!

$ echo "Hello world" | sed -E 's/(\S+).*\s(\S).*$/\1\2/'
Hellow
$ echo "hello world unix" | sed -E 's/(\S+).*\s(\S).*$/\1\2/'
hellou

"hello world unix"를 예로 들어보겠습니다.

  • s/다음 패턴을 교체하세요
  • (\S+)첫 번째 그룹, 하나 이상의 공백이 아닌 문자: "hello"
  • .*중간 부분, 모든 문자: "world"
  • \s공백 문자: ""
  • (\S)두 번째 그룹, 공백이 아닌 문자: "u"
  • .*$끝까지의 모든 문자: "nix"
  • /\1\2/첫 번째 및 두 번째 그룹인 "hello"로 바꿉니다.

배시 사용:

$ var="Hello world"
$ var_end=${var##* };echo ${var%% *}${var_end:0:1}
Hellow

$ var="hello world unix"
$ var_end=${var##* };echo ${var%% *}${var_end:0:1}
hellou

"hello world unix"를 예로 들어보겠습니다.

  • var_end=${var##* }일치하는 접두사 패턴 제거, 가장 긴 일치,
    "hello world", 결과: "unix"
  • ${var%% *}일치하는 접미사 패턴 제거, 가장 긴 일치,
    "world unix", 결과: "hello"
  • ${var_end:0:1}첫 번째 문자 가져오기: "u"

답변2

awk마지막 공백으로 구분된 단어의 첫 번째 문자와 연결된 첫 번째 공백으로 구분된 단어를 출력하는 데 사용됩니다 .

awk '{ print $1 substr($NF, 1, 1) }'

substr()함수는 문자열의 지정된 위치에서 여러 문자를 반환합니다. 여기서 및 는 각각 현재 줄에서 공백으로 구분된 첫 번째 단어와 마지막 단어입니다 $1.$NF

시험:

$ echo 'hello world' | awk '{ print $1 substr($NF, 1, 1) }'
hellow
$ echo 'apple beet carrot' | awk '{ print $1 substr($NF, 1, 1) }'
applec

답변3

배시 사용:

text="hello world unix"
if [[ $text =~ ^([^[:space:]]+).*[[:space:]]([^[:space:]]) ]]; then
    declare -p BASH_REMATCH
    echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
fi
declare -ar BASH_REMATCH='([0]="hello world u" [1]="hello" [2]="u")'
hellou

관련 정보