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