簡體   English   中英

用 sed 替換多個文件中的出現

[英]Replace an occurrence in several files with sed

我有 30 多個文件,我必須替換出現的文件

msgstr ""前面有msgid "(aged %s)

通過的內容

msgstr "..."屬於第一次出現的msgid "(aged %s)

所有文件都位於目錄resources/中:

resources
   lang-fr
       file.po
   lang-ge
       file.po
   lang-it
       file.po
   

如果這有幫助的話,每個文件只有 3 次出現msgid "(aged %s)

文件: file.po

...
...
msgid "(aged %s)
msgstr "good translation %s"
...
...
msgid "(aged %s)
msgstr ""
...
....
msgid "(aged %s)
msgstr ""
....
....

預期結果:

文件: file.po

....
...
msgid "(aged %s)
msgstr "good translation %s"
...
...
msgid "(aged %s)
msgstr "good translation %s"
...
....
msgid "(aged %s)
msgstr "good translation %s"
....
....

我花了幾個小時嘗試使用 sed,但我卡住了。

使用 shell 變量和sed的兩個實例:

r="$(sed -n '/^msgid "(aged %s)$/{n;s/^[^"]*"//p;q}' file.po)"
sed '/^msgid "(aged %s)$/{n;s/\(^msgstr "\)"$/\1'"$r"'/}' file.po 

在第一次運行sed之后,變量$r將包含正確good translation %s" 。接下來的sed遍查找""並將其替換為$r

如果沒有變量,它也可以做得更丑:

sed '/^msgid "(aged %s)$/{n;s/\(^msgstr "\)"$/\1'"$(sed -n '/^msgid "(aged %s)$/{n;s/^[^"]*"//p;q}' file.po)"'/}' file.po

另請參閱Baeldung的有用調查使用 sed 替換多行字符串

現在我只有下面的腳本,這不是預期的

#!/bin/bash
find resources/lang -name '*.po' -exec sed '/^msgid "(aged %s)$/!b
n;/^msgstr "/!b
x;/^$/x;h' {} \;

現在不幸的是輸入= Output

#: app/Age.php:183
#, php-format
msgid "(aged %s)"
msgstr "objective"


#. I18N: The age of an individual at a given date for a Male individual
#: app/Age.php:184
#, php-format
msgctxt "MALE"
msgid "(aged %s)"
msgstr ""


#. I18N: The age of an individual at a given date for a Female individual
#: app/Age.php:188
#, php-format
msgctxt "FEMALE"
msgid "(aged %s)"
msgstr ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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