내 문제를 해결하려는 다른 답변을 보았지만 해결할 수 없습니다.
#!/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
.
- 모든 점을 슬래시로 바꾸고
- 줄 끝에 슬래시 추가
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"