줄 끝에 추가하려면 sed를 사용하세요.

줄 끝에 추가하려면 sed를 사용하세요.

내 문제를 해결하려는 다른 답변을 보았지만 해결할 수 없습니다.

#!/bin/bash
s=org.gnome.Terminal.Legacy.Keybindings
g=$(echo $s | sed "s|\.|/|g") 
echo $g

위의 스크립트가 반환되었습니다.

org/gnome/Terminal/Legacy/Keybindings

/하지만 끝에 추가 해야 합니다 .

org/gnome/Terminal/Legacy/Keybindings/

이를 위해 sed 스크립트를 어떻게 확장할 수 있나요?

답변1

bash를 사용한다면 실제로 sed가 필요하지 않습니다.

s="org.gnome.Terminal.Legacy.Keybindings"
g=${s//.//}/

읽다매개변수 확장${parameter/pattern/string}다른 유용한 내용이 많이 포함된 bash 매뉴얼 페이지( ) 섹션을 참조하세요.

sed를 사용하면 여러 표현식을 지정할 수도 있는데, 이는 때로는 더 읽기 쉽습니다.

s="org.gnome.Terminal.Legacy.Keybindings"
g=$(sed -e 'y,.,/,' -e 's,$,/,' <<<$s)

리터럴 문자를 허용하는 명령 을 사용할 때는 이스케이프할 필요 가 y없습니다 ..y

답변2

이 시도:

sed 's/\.\|$/\//g'
  • |교대 연산자입니다.
  • $줄의 끝과 일치합니다.

데모:

%echo org.gnome.Terminal.Legacy.Keybindings|sed 's/\.\|$/\//g'
org/gnome/Terminal/Legacy/Keybindings/

답변3

sed방법:

s="org.gnome.Terminal.Legacy.Keybindings"
g=$(echo $s | sed "y|.|/|; s|$|/|")
echo $g
org/gnome/Terminal/Legacy/Keybindings/

  • y|\.|/|- 모든 포인트를 .슬래시로 변환/

답변4

여기서는 두 가지 작업을 수행합니다 sed.

  1. 모든 점을 슬래시로 바꾸고
  2. 줄 끝에 슬래시 추가

sed첫 번째 작업은 명령을 통해 수행할 수 있습니다 y#.#/#. 이 명령은 정규식을 사용하지 않고 한 문자열에서 다른 문자열로 문자를 바꾼다는 점에서 y이 유틸리티와 유사하게 작동합니다 . tr이 세 가지는 #명령의 구분 기호입니다(일반적으로 /소문자 y/A-Z/a-z/범위 의 모든 문자를 사용합니다 A-Z). 하지만 명령과 마찬가지로 s원하는 구분 기호를 사용할 수 있습니다.

두 번째 작업은 를 사용하여 줄 끝을 슬래시로 바꾸면 수행할 수 있습니다 s#$#/#.

이것을 합치면 우리는 얻는다.

sed -e 'y#.#/#' -e 's#$#/#'

스크립트에서:

#!/bin/bash
s='org.gnome.Terminal.Legacy.Keybindings'
g=$( sed -e 'y#.#/#' -e 's#$#/#' <<<"$s" )
printf '%s\n' "$g"

이것은 생산할 것입니다

org/gnome/Terminal/Legacy/Keybindings/

물론 슬래시를 사용하여 삽입할 수도 있고 printf점을 슬래시로 바꿀 수도 있습니다 tr.

#!/bin/bash
s='org.gnome.Terminal.Legacy.Keybindings'
g=$( tr '.' '/' <<<"$s" )
printf '%s/\n' "$g"

관련 정보