Bash切割钻石问号符号;
我试图显示每行文本中的第2个和第7个字符Bash切割钻石问号符号;,bash,cut,Bash,Cut,我试图显示每行文本中的第2个和第7个字符 while read line do x=`echo $line | cut -c2,7` echo $x done 样本输入: C.B - Cantonment Board/Cantonment C.M.C – City Municipal Council C.T – Census Town E.O – Estate Office 预期产出: .C .â .“ .“ 我的输出: .C .� .� .�
while read line
do
x=`echo $line | cut -c2,7`
echo $x
done
样本输入:
C.B - Cantonment Board/Cantonment
C.M.C – City Municipal Council
C.T – Census Town
E.O – Estate Office
预期产出:
.C
.â
.“
.“
我的输出:
.C
.�
.�
.�
有人知道为什么会发生这种情况吗?
cut
并不真正支持Unicode。您可能希望改用Perl(改编自):
例如:
$ perl -CIO -ne 'print substr($_, 1, 1) . substr($_, 6, 1) . "\n"' < foo
.C
.â
.“
.“
$perl-CIO-ne'print substr($\u,1,1)。substr($\u6,1)。“\n””
-CIO
告诉perl
输入和输出都是Unicode。substr(var,m,n)
提取从索引m
开始的长度n
的子字符串(从0开始)。因此,第二个字符是索引1处长度为1的子字符串。$\ucode>是保存当前输入行的变量。cut
实际上不支持Unicode。您可能希望改用Perl(改编自):
例如:
$ perl -CIO -ne 'print substr($_, 1, 1) . substr($_, 6, 1) . "\n"' < foo
.C
.â
.“
.“
$perl-CIO-ne'打印substr($\u1,1)。substr($\u6,1)。“\n”
-CIO
告诉perl
输入和输出都是Unicode。substr(var,m,n)
提取从索引m
开始的长度n
的子字符串(从0开始)因此,第二个字符是索引1处长度为1的子字符串。$\ucode>是保存当前输入行的变量。您可以使用bash
的子字符串参数展开
while read line; do
x=${line:1:1}${line:6:1} # 0-based counting
echo "$x"
done <<EOF
C.B - Cantonment Board/Cantonment
C.M.C – City Municipal Council
C.T – Census Town
E.O – Estate Office
EOF
读取行时;执行以下操作
x=${line:1:1}${line:6:1}#基于0的计数
回音“$x”
完成您可以使用bash
的子字符串参数扩展
while read line; do
x=${line:1:1}${line:6:1} # 0-based counting
echo "$x"
done <<EOF
C.B - Cantonment Board/Cantonment
C.M.C – City Municipal Council
C.T – Census Town
E.O – Estate Office
EOF
读取行时;执行以下操作
x=${line:1:1}${line:6:1}#基于0的计数
回音“$x”
“完成”看起来像是将代码点拆分为不完整的代码单元。我不认为cut
是UTF-8-aware。看起来像是将代码点拆分为不完整的代码单元。我不认为cut
是UTF-8-aware。我认为这取决于语言环境。对于UTF-8语言环境,这是正确的,对于C语言环境,它的行为类似于ecut
。我认为这取决于语言环境。对于UTF-8语言环境,这是正确的,而对于C语言环境,它的行为类似于cut
。