示例编号:
12345678
我的尝试:
sed 's/\(.\)\(.\)/\2\1/'
我的结果:
21345678
此行将交换数字的第一位置和第二位置。我似乎还不知道该如何处理其他职位。
答案 0 :(得分:1)
您只需对其进行修改以捕获更多的组,然后以所需的顺序输出它们:
$isReviewed = ProjectUser::where('user_id', Auth::user()->id) ->select(DB::raw('(CASE WHEN is_reviewed = 0 THEN "0" ELSE "1" END)'))->first()->is_reviewd;
请记住,这是在最简单的情况下,您只想交换字符位置而不论它们是否为数字。您可以轻松地重新扩展字符类以限制交换的内容,但是我的目的只是展示实现交换的最简单方法。
答案 1 :(得分:1)
您可以将第4个字母和第7个字母替换为:
sed 's/^(...)(.)(..)(.)/\1\4\3\2/'
# | | | | |
# | | | | +- digit #7(\4)
# | | | +----- 2 chars (\3)
# | | +-------- digit #4 (\2)
# | +------------ 3 chars (\1)
# +--------------- start-of-line anchor
输出:
sed 's/\([0-9]\{3\}\)\([0-9]\)\([0-9]\{2\}\)\([0-9]\)/\1\4\3\2/' <<< "12345678"
答案 2 :(得分:1)
似乎更清洁使用awk
:
$ echo 12345678 | awk '{t=$4; $4=$7; $7=t}1' FS= OFS=
12375648
答案 3 :(得分:0)
这可能对您有用(GNU sed):
sed -E 's/./\n&/7;s//\n&/4;s/\n(.)(.*)\n(.)/\3\2\1/' file
在字符位置引入换行符,并使用模式匹配来交换这些字符。
替换的正常流程必须相反,否则引入的换行符会影响原始字符串的长度。
答案 4 :(得分:0)
使用通过-E
选项支持ERE的sed,例如GNU sed和OSX / BSD sed:
$ echo '12345678' | sed -E 's/(.{3})(.)(.{2})(.)/\1\4\3\2/'
12375648