명령 대체 : 공백이 아닌 줄 바꿈으로 분할

올드 프로

이 문제를 여러 가지 방법으로 해결할 수 있다는 것을 알고 있지만 bash 내장 기능 만 사용하여 수행 할 수있는 방법이 있는지, 그렇지 않은 경우 가장 효율적인 방법이 무엇인지 궁금합니다.

다음과 같은 내용의 파일이 있습니다.

AAA
B C DDD
FOO BAR

즉, 여러 줄이 있고 각 줄에는 공백이 있거나 없을 수 있습니다. 다음과 같은 명령을 실행하고 싶습니다.

cmd AAA "B C DDD" "FOO BAR"

내가 사용 cmd $(< file)하면 얻을

cmd AAA B C DDD FOO BAR

그리고 내가 사용 cmd "$(< file)"하면

cmd "AAA B C DDD FOO BAR"

각 라인이 정확히 하나의 매개 변수로 처리되도록하려면 어떻게해야합니까?

올드 프로

이 작업을 수행하는 표준 방법 bash은 다음과 같습니다.

unset args
while IFS= read -r line; do 
    args+=("$line") 
done < file

cmd "${args[@]}"

또는 bash 버전에 다음이있는 경우 mapfile:

mapfile -t args < filename
cmd "${args[@]}"

mapfile과 while-read 루프와 one-liner 사이에서 찾을 수있는 유일한 차이점

(set -f; IFS=$'\n'; cmd $(<file))

전자는 빈 줄을 빈 인수로 변환하는 반면 한 줄은 빈 줄을 무시합니다. 이 경우 한 줄짜리 행동은 어쨌든 내가 선호하는 것이므로 두 배의 보너스는 컴팩트합니다.

나는 사용할 IFS=$'\n' cmd $(<file)것이지만 작동하지 않습니다. 왜냐하면 효력이 발생 $(<file)하기 전에 명령 줄을 형성하도록 해석 되기 때문 입니다 IFS=$'\n'.

제 경우에는 작동하지 않지만 이제는 많은 도구 가 이러한 상황의 일반적인 원인 인 파일 이름을 처리 할 때 줄을 끝내는 것을 지원하는 null (\000)대신 newline (\n)에 이러한 상황의 일반적인 원인 인 파일 이름을 처리 할 때이 작업을 훨씬 쉽게 지원한다는 것을 배웠습니다. :

find / -name '*.config' -print0 | xargs -0 md5

globbing, interpolating 등의 작업없이 완전한 파일 이름 목록을 md5에 대한 인수로 제공합니다. 비 내장 솔루션으로 이어집니다.

tr "\n" "\000" <file | xargs -0 cmd

이것 역시 공백 만있는 줄을 캡처하지만 빈 줄을 무시합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

명령 확장에 포함 된 줄 바꿈이 공백으로 대체되는 이유는 무엇입니까?

분류에서Dev

Java는 "\ n"을 줄 바꿈이 아닌 것으로 구문 분석합니다.

분류에서Dev

head 명령-공백이 아닌 첫 줄 찾기

분류에서Dev

프로세스 출력을 줄과 공백으로 분할 된 명령으로 파이프

분류에서Dev

'y'명령을 전체 줄이 아닌 일치하는 텍스트에만 적용 할 수 있습니다.

분류에서Dev

이스케이프 된 줄 바꿈으로 긴 명령에 주석을 삽입 할 수 있습니까?

분류에서Dev

파이썬 정규식-사이에 공백이있는 줄 바꿈을 연속으로 분할 문자열

분류에서Dev

명령 줄 인수, 공백이있는 경로, 잘못 구문 분석

분류에서Dev

cmd의 Powershell 명령이 줄 바꿈을 대체하지 않습니다.

분류에서Dev

Vim에서 한 줄에서 공백이 아닌 문자의 시작 부분으로 커서 이동

분류에서Dev

줄 바꿈이 아닌 <pre>의 최대 너비

분류에서Dev

PHP에서 줄 바꿈이 아닌 단어 사이에 공백 추가

분류에서Dev

bash 붙여 넣기 명령이 자동으로 줄 바꿈 오류 삽입

분류에서Dev

로드가 아닌 리소스에 대한 대체`batch` 명령

분류에서Dev

zsh 명령 줄 편집기 : 명령을 입력 할 때 이전 줄로 돌아갑니다.

분류에서Dev

Mac 명령 줄에서 sed를 사용할 때 줄 바꿈으로 바꿀 수 없음

분류에서Dev

줄 바꿈으로 구분 된 목록을 인수로 다른 명령에 파이프하는 방법은 무엇입니까?

분류에서Dev

Windows 명령 줄-0이 아닌 값이있는 필터 줄

분류에서Dev

명령 대체가 후행 줄 바꿈을 제거하는 것을 방지하는 우아한 방법

분류에서Dev

공백이있는 줄 바꿈으로 구분 된 목록을 인수로 변환

분류에서Dev

쉘 : 명령 대체에서 후행 줄 바꿈 ( '\ n') 유지

분류에서Dev

mkvtoolnix 명령 줄로 mkv 파일 분할

분류에서Dev

명령 줄에서 실행할 때 stacktrace에 줄 바꿈이 없습니까?

분류에서Dev

공백이 아닌 범위를 한 줄로 통합

분류에서Dev

SED로 공백이 아닌 주석 줄 유지

분류에서Dev

Bash : 둘 이상의 명령 줄 대체

분류에서Dev

아파치 라이브러리없이 공백을 기반으로 줄을 문자열로 분할

분류에서Dev

java -jar을 bash 명령 줄로 대체

분류에서Dev

명령 출력을 다른 bash 명령으로 대체하지만 동시에 줄 바꿈을 유지합니까?

Related 관련 기사

  1. 1

    명령 확장에 포함 된 줄 바꿈이 공백으로 대체되는 이유는 무엇입니까?

  2. 2

    Java는 "\ n"을 줄 바꿈이 아닌 것으로 구문 분석합니다.

  3. 3

    head 명령-공백이 아닌 첫 줄 찾기

  4. 4

    프로세스 출력을 줄과 공백으로 분할 된 명령으로 파이프

  5. 5

    'y'명령을 전체 줄이 아닌 일치하는 텍스트에만 적용 할 수 있습니다.

  6. 6

    이스케이프 된 줄 바꿈으로 긴 명령에 주석을 삽입 할 수 있습니까?

  7. 7

    파이썬 정규식-사이에 공백이있는 줄 바꿈을 연속으로 분할 문자열

  8. 8

    명령 줄 인수, 공백이있는 경로, 잘못 구문 분석

  9. 9

    cmd의 Powershell 명령이 줄 바꿈을 대체하지 않습니다.

  10. 10

    Vim에서 한 줄에서 공백이 아닌 문자의 시작 부분으로 커서 이동

  11. 11

    줄 바꿈이 아닌 <pre>의 최대 너비

  12. 12

    PHP에서 줄 바꿈이 아닌 단어 사이에 공백 추가

  13. 13

    bash 붙여 넣기 명령이 자동으로 줄 바꿈 오류 삽입

  14. 14

    로드가 아닌 리소스에 대한 대체`batch` 명령

  15. 15

    zsh 명령 줄 편집기 : 명령을 입력 할 때 이전 줄로 돌아갑니다.

  16. 16

    Mac 명령 줄에서 sed를 사용할 때 줄 바꿈으로 바꿀 수 없음

  17. 17

    줄 바꿈으로 구분 된 목록을 인수로 다른 명령에 파이프하는 방법은 무엇입니까?

  18. 18

    Windows 명령 줄-0이 아닌 값이있는 필터 줄

  19. 19

    명령 대체가 후행 줄 바꿈을 제거하는 것을 방지하는 우아한 방법

  20. 20

    공백이있는 줄 바꿈으로 구분 된 목록을 인수로 변환

  21. 21

    쉘 : 명령 대체에서 후행 줄 바꿈 ( '\ n') 유지

  22. 22

    mkvtoolnix 명령 줄로 mkv 파일 분할

  23. 23

    명령 줄에서 실행할 때 stacktrace에 줄 바꿈이 없습니까?

  24. 24

    공백이 아닌 범위를 한 줄로 통합

  25. 25

    SED로 공백이 아닌 주석 줄 유지

  26. 26

    Bash : 둘 이상의 명령 줄 대체

  27. 27

    아파치 라이브러리없이 공백을 기반으로 줄을 문자열로 분할

  28. 28

    java -jar을 bash 명령 줄로 대체

  29. 29

    명령 출력을 다른 bash 명령으로 대체하지만 동시에 줄 바꿈을 유지합니까?

뜨겁다태그

보관