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