Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash切割钻石问号符号࿽;_Bash_Cut - Fatal编程技术网

Bash切割钻石问号符号࿽;

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 .� .� .�

我试图显示每行文本中的第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
.�
.�
.�

有人知道为什么会发生这种情况吗?

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语言环境,它的行为类似于e
cut
。我认为这取决于语言环境。对于UTF-8语言环境,这是正确的,而对于C语言环境,它的行为类似于
cut