다른 파이핑 bash 문자열 조작 질문을 읽었지만 특수 응용 프로그램 인 것 같습니다.
본질적으로 아래에서 더 간단하게 수행 할 수있는 방법이 있습니까?
대신에
$ string='hello world'; string2="${string// /_}"; echo "${string2^^}"
HELLO_WORLD
같은
$ echo 'hello world' | $"{-// /_}" | "${ -^^}"
HELLO_WORLD
편집 속도를 유지하기 위해 가능한 한 bash 조작에 관심이 있습니다 (스크립트를 크게 늦추는 sed / awk와 반대)
편집 2 : @jimmij
나는 두 번째 예를 좋아하고 기능을 수행하도록 이끌었습니다.
bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; }
echo hello world | bash_m
HELLO_WORLD
tr
매뉴얼을 말하면 프로세스를 생성하는 시간이 문자열 조작 시간과 비교할 때 무시할 수 있기 때문에 반대의 경우도 마찬가지입니다. sed
그리고 awk
최선을 다하고 있습니다. 문자열이 너무 길면 전체 bash 매뉴얼을 말하면 bash는 내부 제한으로 인해 전체 진행을 거부 할 수 있습니다.
sed
, awk
, tr
또는 이와 유사한. 내가 정확히 정보를 추가 얼마 전에 편집 gena2x 대답을 봐 : unix.stackexchange.com/questions/162221/... 당신은 그가 짧은 문자열을위한 시간을 제공 같은 질문에 terdon 응답과 비교 할 수있는 케이스 프로세스 생성에 가장 많은 시간이 걸립니다. 직접 테스트하고 결과를 게시 할 수 있습니다.
read x; echo $x
이 성능면에서 더 좋을까요? 구문은 더 짧거나 깔끔하게 보이지 않습니다. x=${x// /_}; x=${x^^}
와 동일한 작업을 수행하는 훨씬 간결한 방법 {read x; echo ${x...
입니다. @jimmij는 성능이 향상 되는 한 포크 개수가 같을 때보 다 tr
/ sed
가 빠를 것이라고 지적했습니다 bash
. 파이프를 사용하면 항상 추가 프로세스가 발생하므로 포크 저장에 대한 주장은 더 이상 적용되지 않습니다. 따라서 파이프를 사용하는 경우 sed
/ tr
etc를 사용 하십시오. bash에서 파이프를 사용할 수 있으면이 말을 건너 뛰십시오 read x; echo $x
.