我的檔案中有一個日期為 01/01/2022 的檔案,我需要將其更改為 01-01-2022。我需要使用 sed 命令來更改格式(用于家庭作業)。
到目前為止,我已經嘗試過:
s|([0-9]{2})/([0-9]{2})/([0-9]{4})|\3-\2-\1| file name
sed -e 's/([0-9][0-9]/])/([0-9][0-9]/)/\([0-9][0-9][0-9][0-9]/)/\1-2-3\g' file name
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\1-\2-\3/' filename
沒有一個對我有用。我不確定還能嘗試什么,任何建議將不勝感激!
謝謝!
uj5u.com熱心網友回復:
$ echo '01/01/2022'|sed 's@/@-@g'
01-01-2022
以及保留其他斜杠的情況:
$ echo 'abc/d 01/01/2022'|sed -E 's/([0-9] )\/([0-9] )\/([0-9] )/\1-\2\-\3/'
abc/d 01-01-2022
uj5u.com熱心網友回復:
你快到了……
這必須作為擴展正則運算式(sed -r或sed -E)運行,并輸出年-日-月:
s|([0-9]{2})/([0-9]{2})/([0-9]{4})|\3-\2-\1| filename
# ^^^^^^^^-- likely want \1-\2-\3
next 在運算式中有一個雜散的右括號,可以從s命令的不同分隔符中受益。在您的第一個版本中使用|like 可以避免必須轉義所有斜杠,而您沒有這樣做。它也混淆了正斜杠和反斜杠,并且必須轉義所有括號或使用-E/-r而不是轉義任何括號:
sed -e 's/([0-9][0-9]/])/([0-9][0-9]/)/\([0-9][0-9][0-9][0-9]/)/\1-2-3\g' filename
# || | | | | |||^-- must be a forward slash, not a backslash
# || | | | | ^^^-- must be \2-\3
# || ^-----------(- -- must be escaped (or use a different separator)
# ^^--- stray closing bracket |
# ^------------------------ -- should be backslashes or removed (depending on whether using basic or extended regex)
最后一個應該可以作業,但只匹配行尾的日期
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\1-\2-\3/' filename
# ^-- matches only at end of line
uj5u.com熱心網友回復:
您需要-r選擇()并{}在不逃避它們的情況下作業。\1-\2-\3如果您用作替代品,則第一種方法有效。
$ sed -r 's|([0-9]{2})/([0-9]{2})/([0-9]{4})|\1-\2-\3|' <<EOF
foo 01/22/3456 bar
EOF
foo 01-22-3456 bar
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512513.html
標籤:linuxUnixsed
