Awk使用一例:获取ASCII可见字符

要做一个需求, 支持可见特殊字符的密码设置。 首先, 需要获取到所有可见特殊字符。 到网上搜索到 ASCII 字符表格, 并复制到文本文件 vschars.txt:

00	00	0	nul	100	40	64	@
01	01	1	soh	101	41	65	A
02	02	2	stx	102	42	66	B
03	03	3	etx	103	43	67	C
04	04	4	eot	104	44	68	D
05	05	5	enq	105	45	69	E
06	06	6	ack	106	46	70	F
07	07	7	bel	107	47	71	G
10	08	8	bs	110	48	72	H
11	09	9	ht	111	49	73	I
12	0a	10	nl	112	4a	74	J
13	0b	11	vt	113	4b	75	K
14	0c	12	ff	114	4c	76	L
15	0d	13	er	115	4d	77	M
16	0e	14	so	116	4e	78	N
17	0f	15	si	117	4f	79	O
20	10	16	dle	120	50	80	P
21	11	17	dc1	121	51	81	Q
22	12	18	dc2	122	52	82	R
23	13	19	dc3	123	53	83	S
24	14	20	dc4	124	54	84	T
25	15	21	nak	125	55	85	U
26	16	22	syn	126	56	86	V
27	17	23	etb	127	57	87	W
30	18	24	can	130	58	88	X
31	19	25	em	131	59	89	Y
32	1a	26	sub	132	5a	90	Z
33	1b	27	esc	133	5b	91	[
34	1c	28	fs	134	5c	92	35	1d	29	gs	135	5d	93	]
36	1e	30	re	136	5e	94	^
37	1f	31	us	137	5f	95	_
40	20	32	sp	140	60	96	‘
41	21	33	!	141	61	97	a
42	22	34	"	142	62	98	b
43	23	35	#	143	63	99	c
44	24	36	$	144	64	100	d
45	25	37	%	145	65	101	e
46	26	38	&	146	66	102	f
47	27	39	`	147	67	103	g
50	28	40	(	150	68	104	h
51	29	41	)	151	69	105	i
52	2a	42	*	152	6a	106	j
53	2b	43	+	153	6b	107	k
54	2c	44	,	154	6c	108	l
55	2d	45	-	155	6d	109	m
56	2e	46	.	156	6e	110	n
57	2f	47	/	157	6f	111	o
60	30	48	0	160	70	112	p
61	31	49	1	161	71	113	q
62	32	50	2	162	72	114	r
63	33	51	3	163	73	115	s
64	34	52	4	164	74	116	t
65	35	53	5	165	75	117	u
66	36	54	6	166	76	118	v
67	37	55	7	167	77	119	w
70	38	56	8	170	78	120	x
71	39	57	9	171	79	121	y
72	3a	58	:	172	7a	122	z
73	3b	59	;	173	7b	123	{
74	3c	60	<	174	7c	124	|
75	3d	61	=	175	7d	125	}
76	3e	62	>	176	7e	126	~
77	3f	63	?	177	7f	127	del

现在, 需要从该文本文件中抽取出所有可见特殊字符, 当然, 也包括常见的大小写字母及数字。 使用如下命令即可:

$ awk  ‘BEGIN{OFS="\n"}{print $4, $8}‘ vschars.txt | sort | awk ‘BEGIN{ORS=""}{if(length($0) ==1){print $0}}‘
‘-!"#$%&()*,./:;[email protected][\]^_`{|}~+<=>0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

解释一下:

1.  首先要输出需要的字符。awk 使用 $4, $8 可以获取所需列,默认空白符分割, 输出分割符 OFS 选择换行, 保证每行一个;

2.  接着做一个排序, 使得字母、数字、特殊字符分开显示;

3.  发现可见字符是一个字符, 可以使用记录长度进行过滤: if(length($0) ==1){print $0}。 记录分隔符 ORS 选择空字符串,保证所有可见字符紧挨着显示。便于直接写正则表达式。

支持ASCII可见字符(包含空格)的正则表达式为: ^[a-zA-z0-9‘!\"#$%&()*,./:;[email protected]^_`\\[\\]{|}~+<=>\\ -]{m,n}$

时间: 2024-12-18 10:35:48

Awk使用一例:获取ASCII可见字符的相关文章

isascii(测试字符是否为ASCII码字符)

/*isascii(测试字符是否为ASCII码字符) 相关函数 iscntrl 表头文件 #include <ctype.h> 定义函数 int isascii(int c); 函数说明 检查参数c是否为ASCII码字符,也就是判断c的范围是否在0到127之间. 返回值 若参数c为ASCII码字符,则返回TRUE,否则返回NULL ( 0 ). 附加说明 此为宏定义,非真正函数. 范例*/ /* 判断int i是否具有对映的ASCII码字符 */ #include<stdio.h>

Linux awk 使用用例

环境:CentOS 鉴于语句描述苍白无力,用例子直接说明. 文件内容: zilzhang 19881110 jiangxi 18 film zhagnsan 21321    sichuan 100 card 1. 打印整行 $ awk '{print $0}' mytxt zilzhang 19881110 jiangxi 18 film zhagnsan 21321    sichuan 100 card 2. 打印第三行 $ awk '{print $3}' mytxt jiangxi s

所有的字符编码由System.Text.Encoding类获取所有的字符编码如Unicode编码、 GB18030编码、(UTF-8) 简体中文(GB2312)

本页列出来目前window下所有支持的字符编码  ---通过 System.Text.Encoding.GetEncodings()获取,里面可以对其进行查询,筛选,对同一个字符,在不同编码进行查看和分析... 代码页编号 名称 代码 类型 单字节码位 37 IBM EBCDIC (美国-加拿大) IBM037 SBCSCodePageEncoding 是 437 OEM 美国 IBM437 SBCSCodePageEncoding 是 500 IBM EBCDIC (国际) IBM500 SB

在Swift中的ASCII到字符转换的问题

我们在C++里处理字符通常是这样的 char a = 'A' // A = 65 printf("'%c' = %d", a + 1, a + 1) // 'B' = 66 这在号称吸收C/C++所有优势特性的Swift里面是行不通的,因为 Character 和 Int 不能进行计算操作,会报错 var c:Character = "A" c + 1 // 这里是错误的 Xcode 会告诉你 Binary operator '+' cannot be applie

string, CString, char[]与ASCII的字符表示

对于字符串的处理在C++中可谓是一个颇为棘手的问题,而像JAVA和C#这种基于托管的平台则不存在此类问题. 我们先来讨论一下memcpy和strcpy这两个方法. void* memcpy(void *memTo, const void *memFrom, size_t size); char* strcpy(char * dest, const char * src); 这两个方法的区别主要有一下3个: 1. 复制的内容不同,strcpy只能复制字符串,而memcpy则可以复制任何的内容,例如

ASCII与字符的转换

int():int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报错,认为超出该进制的表示范围.所以int()是将整数字符串转化成整型. ord(c):参数是长度为1的字符串,简称字符.当参数为统一对象时(unicode object),返回能代表该字符的统一编码,当参数为8比特的字符串时,返回该字节的值.例如,ord('a')返回整形数值97,ord(u'\u2020')返回8224. chr(i):返回一个字符,字符的ascii码等于参数中的整形数值.例如chr(

字符转ascii与ascii 转字符

编程:输入a-z,A-Z中的字母组成字符串,输出下一个字母,如: azAZ 输出:baBA-----------------------------------public class TestASCII { public static void main(String[] args) { String str="azAZ"; String s = stringToAscii(str); System.out.println("str 转化为ascii:"+s);

Java 正则表达式获取两个字符中间的内容

利用 正则表达式 获取两个字符串中间的值 直接上代码吧,不是很难. public static void main(String[] args) { // 内容 String value = "fileNameCode-->_AD2467524284sd234.json"; // 匹配规则 String reg = "_(.*?)\\."; Pattern pattern = Pattern.compile(reg); // 内容 与 匹配规则 的测试 Mat

Httpservlet 获取json对象字符窜

使用的是google 的json转换jar import com.google.gson.JsonObject;import com.google.gson.JsonParser; import org.apache.commons.io.IOUtils; public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOExcept