shell过滤中文
Ⅰ 如何在Linux shell下做中文字符串的匹配
a=$( expr 'helloworld20140501.txt' : '.*\([0-9]\{8\}\).*' )
echo $a
linux shell 中可以将命令的结果赋值给变量,$(命令)这种格式将返回命令执行后的结果字符串
上面命令执行后,变量a的值是20140501
a=`echo 'helloworld20140501.txt'|sed 's/.*\([0-9]\{8\}\).*/\1/'`
这个命令作用也是一样,变量a被赋值为20140501!
Ⅱ 如何用shell实现中文转unicode
你自己去了解下iconv命令吧
Ⅲ bash shell终端中文显示
首先纠正你的一个错误, bash shell并不是终端。
终端的概念是一个应用程序, 负责解释对端传来的数据显示给用户看,同时接受用户的输入传输给对端。
如果你用的是gnome, 这个终端一般就是gnome-terminal, 终端有很多, 比如xterm, cxterm, 等等, 还有在windows下的netterm teraterm , securetty, putty等,都是终端。甚至windows的dos窗口也是终端的一种。更广义的, windows的远程桌面,也是终端,“图形终端”
ok,接下去解释你的问题, 终端最重要功能之一是显示对端传输过来的内容给用户。 对于字符终端,那么就是把字符内码变成具体字体文件中的某一个字体显示给用户看。 你执行了 LANG=UTF-8,那么大部分linux软件输出的信息就是用UTF-8编码的文字, 如果你的终端可以正确显示这些文字,说明你的终端中默认编码为UTF-8.
然后你挂载了windows分区, 比如用ls命令列目录, 刚才说到LANG=UTF-8会影响linux命令的输出信息为UTF
-8编码,但是大部分命令来说,仅仅影响该命令自身输出的信息,比如 问一个一个问题,告诉你一个信息。 而对于ls来说,它的作用是把实际存在的文件名字告诉你, 这个文件名字的编码是什么,ls不关心,所以 你的mount命令,对于linux的文件系统来说, 是把储存在vfat文件系统上的文件名用 cp936的代码页编码提供给linux, 所以ls命令读到的也是cp936代码页的编码,实际上也就是我们平时说的GB编码, ls命令就把这些文件名输出给终端, 终端只认识utf-8编码, gb编码的不认识,就变成了"?"。
试试 iocharset=utf-8看看有没有用。 手上没有测试环境,不过最重要的是你要理解这种情况发生的原因。
Ⅳ shell 字符串过滤问题
read-p"pleaseinput:"str
echo$theFile|sed-r's/(.*_)[^_]+$/1'$str'/g'
Ⅳ shell 判断是否为中文
echo 'zhangsan张三' |awk '{print gensub(/[!-~]/,"","g",$0)}'
张三
echo 'zhangsan张三' |awk '{print gensub(/[^!-~]/,"","g",$0)}'
zhangsan
ascii 码表顺序上, ! - ~ 基本就涵盖了全部可见字符了,这个编码之外的就是中文了(对这个例子而言)
Ⅵ 如何让shell脚本支持中文
shell脚本支不支持中文是 看你的系统的,如果你装linux的时候装了中文包 ,那他就支持。
Ⅶ 请教一个Shell脚本能将其它文件中的中文的“替换为英文的"
查看文件cat命令
[service@gan .ssh]$ cat file.txt
1A1A
2B2B
3C3C
gan.cublog.cn
默认就替换第一个字符
指定只替换第2个字符
[service@gan .ssh]$ sed 's/1/X/2' file.txt
1AXA
2B2B
3C3C
替换所有字符
[service@gan .ssh]$ sed 's/1/X/g' file.txt
XAXA
2B2B
3C3C
Ⅷ shell脚本中ls过滤显示问题
#应该是用下面:
ls-l/tmp/*.xml
#当然,还有其他办法,如:
find/tmp-name*.xml|xargsls-l
希望能够帮助到你,你的好评是我前进的动力,谢谢!
Ⅸ linux 操作系统中shell过滤
这不简单,for循环嵌套case多分枝选择结构,一楼的回答我就不说什么了,根本就没有/bash/这个路径,sh自然也不会存在在这个路径上。这个脚本就是可能的数值太多,case分支写得累……。算了,我给你写个吧。
说明:此脚本接收脚本后跟的第一个参数为读取定义数值的文本,比如说你在工作路径上有个叫test的文件,该文件定义了需要包含的数字,脚本本身的文件名是num那么执行该脚本的命令是./num ./test
每个数字对应的命令自己改吧,我这里全是打印文件里包含了对应的数值到标准输出上。以下脚本在ubuntu server 8.04测试通过。
#! /bin/bash
for var in `sed 's/,/ /g' $1` #注意,包围sed语句的是反引号,即字母键盘上方数字1左边的那个键
do
case $var in
0)
echo "0 is in the string\.";;
1)
echo "1 is in the string\.";;
2)
echo "2 is in the string\.";;
3)
echo "3 is in the string\.";;
4)
echo "4 is in the string\.";;
5)
echo "5 is in the string\.";;
6)
echo "6 is in the string\.";;
7)
echo "7 is in the string\.";;
8)
echo "8 is in the string\.";;
9)
echo "9 is in the string\.";;
10)
echo "10 is in the string\.";;
11)
echo "11 is in the string\.";;
12)
echo "12 is in the string\.";;
13)
echo "13 is in the string\.";;
14)
echo "14 is in the string\.";;
15)
echo "15 is in the string\.";;
16)
echo "16 is in the string\.";;
17)
echo "17 is in the string\.";;
18)
echo "18 is in the string\.";;
19)
echo "19 is in the string\.";;
20)
echo "20 is in the string\.";;
21)
echo "21 is in the string\.";;
22)
echo "22 is in the string\.";;
23)
echo "23 is in the string\.";;
24)
echo "24 is in the string\.";;
25)
echo "25 is in the string\.";;
26)
echo "26 is in the string\.";;
27)
echo "27 is in the string\.";;
28)
echo "28 is in the string\.";;
*)
echo "One or more variable\(s\) in $1 is out of range!";;
esac
done
Ⅹ shell根据条件进行数据过滤
用awk,NA数量大于六,丢弃,met列各字段值求平均,不符合,丢弃,否则打印写入另一个文件,文件如果是csv,分分隔符设置成逗号,