[英]why is this sed command not working?
我想從pwd命令的結果中刪除父目錄的某些部分。 第一步,我想使用sed在“ home”之后獲取字符串部分,但老實說我不知道我在做什么錯。 我認為我已經正確設置了要創建的子字符串,並將其作為sed替代的輸出。
$ pwd
/home/user1/projects/bashscript
$ pwd | sed -r 's/\*home(\*)/\1/'
/home/user1/projects/bashscript
sed的正確正則表達式為:
pwd | sed -r 's/.*home(.*)/\1/'
*
可以匹配shell中的任何東西,即glob模式,但在正則表達式中等效的模式是.*
。
但是,如果您使用的是bash
,則無需使用sed
。 您可以使用bash字符串操作來做到這一點:
echo "${PWD/\/home/}"
更新:如果PWD
有多個/home
,則根據下面Ed的評論。
假設PWD=/foo/123/home/dir/home/abcd
:
使用更正確:
echo "${PWD#*/home}"
/dir/home/abcd
#
將在字符串的左側(開始)找到一個球形模式 */home
將刪除所有內容,直到從左邊開始第一次出現 PWD
值中的/home
為止 您需要使用.*
( 匹配零個或多個字符 )來代替\\*
。 *
是正則表達式中的特殊字符,它將前一個令牌重復零次或更多次。 正則表達式中的點匹配除換行符以外的任何字符。
$ pwd | sed -r 's~.*/home/(.*)~\1~'
要么
$ pwd | sed -r 's~.*/home(/.*)~\1~'
使用除正斜杠之外的其他正則表達式定界符,因為您的輸入包含正斜杠。 有時可能會引起網孔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.