反转当前行中的所有单词

αғs*_*нιη 2 text-processing

我有一个文件,我想反转其中的所有单词。

前输入文件:

DCBA. HGFE.GI
MLK,PON.RQ
UTS. ZYXWV. 321
Run Code Online (Sandbox Code Playgroud)

ex 输出文件:(我想要的

ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123
Run Code Online (Sandbox Code Playgroud)

使用此 sed 脚本: sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'所有整行都反转。

上述命令产生的错误输出:

IG.EFGH .ABCD    
QR.NOP,KLM    
123 .VWXYZ .STU 
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到我想要的输出?

Ase*_*rre 7

在纯 bash 中尝试这个

#!/bin/bash
while IFS= read -N1 char; do
    if [[ "$char" =~ [[:alnum:]] ]]; then
        word="$char$word"
    else
        echo -n "$word$char"
        word=""
    fi
done <input.file >output.file
Run Code Online (Sandbox Code Playgroud)

输出 :

ABCD. EFGH.IG
KLM,NOP.QR
STU. VWXYZ. 123
Run Code Online (Sandbox Code Playgroud)

这个代码逻辑很简单。我们逐字符读取文件(感谢-N1标志。IFS=也需要能够读取换行符),然后我们在$word变量的开头添加我们遇到的每个有效字符(从而反转单词)。当我们遇到非字母数字字符时,我们会回显 的值$word并将该值重置为空。我们重复这些步骤直到文件结束