我有一个文件,我想反转其中的所有单词。
前输入文件:
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)
我怎样才能得到我想要的输出?
在纯 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并将该值重置为空。我们重复这些步骤直到文件结束