簡體   English   中英

為什么這個sed命令不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM