使用shell脚本在字符串中交换字符

时间:2011-08-03 19:44:53

标签: shell

我需要交换一个字符串的字符(这是mmddyyyy格式)并在yyyymmdd中重新排列它们。此字符串是从文件名(abc_def_08032011.txt)获得的。

string=$(ls abc_def_08032011.txt | awk '{print substr($0,9,8)}')

例如:

  • 当前字符串:08032011(这可能不一定是当前日期)
  • 所需字符串:20110803

我尝试过分割功能,但由于字符串没有任何分隔符,因此无效。

非常感谢任何想法/建议。

2 个答案:

答案 0 :(得分:4)

echo 08032011 | sed 's/\(....\)\(....\)/\2\1/'

echo 08032011 | perl -pe 's/(....)(....)/$2$1/'

答案 1 :(得分:1)

为什么不一直使用awk:

echo abc_def_08032011.txt | awk '{print substr($0,13,4) substr($0,9,4)}'

或sed一路,避免一个awk:

echo abc_def_08032011.txt | sed 's/^........\(....\)\(....\).*$/\2\1/'

或一直使用ksh替换以避免产生awk / sed进程:

s=abc_def_08032011.txt
s1="${s#????????}"
s2="${s1%.*}"
echo "${s2#????}${s2%????}"