⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readinfo

📁 早期freebsd实现
💻
字号:
#!/bin/sh# @(#) readinfo 1.3 92/08/31 @(#)# reads a host database file## input from stdin# output to stdout## arguments are names of fields in the file## fields in a file are defined by a comment line of the form# #FIELDS <field_description> ...## where <field_description> is the name of the field followed by optional# keyword parameters of the form parameter=<value># three paramaters are supported in this script#	prefix - prefix added to value of the field#	suffix - suffix added to value of field#	no - character to prevent adding a prefix or suffix to a field## fields in the file are separated with white space.  Embedded blanks in fields# are either escaped with a '\' or the entire field is quoted with double quotes# The prefix or suffix can be overridden by prepending or following the value# with the ``no='' character# Copyright (c) 1992 by Texas Internet Consulting# This code may be freely copied and used so long as this# copyright notice is attached.  This code may not be sold# without the express written permission of Texas Internet Consulting.# Texas Internet Consulting makes no warranty as to the correctness# nor the applicability of this code for any purpose.# get the fields from the command line - will be funnelled to awkfields="$*"# change whitespace to tabs and handle quoted fields and escaped blanks# also remove comment lines, except the #FIELDS lineawk 'BEGIN {	# get around double quote bug	dq = sprintf("%c", 34)}/^#FIELDS/ || ( ! /^#/ && ! /^$/ && ! /^[ 	][ 	]*/ ) {# line has double quotes or backslashes	if ($0 ~ /"/ || $0 ~ /\\/) {		# print everything up to field with double quote or backslash		l = length($0)		n = 0		for (i=1; i<=NF; i++) {			if ($i !~ /"/ && $i !~ /\\/) {				printf("%s\t", $i)			}			n += length($i)			n++		}		remainder = substr($0, n+1, l-n)		l -= n		quoted = 0		escaped = 0		for (i=1; i<=l; i++) {			sub = substr(remainder, i, 1)			if (sub == dq) {				if (quoted) {					quoted = 0				}				else {					quoted = 1				}			}			else if (sub == "\\") {				escaped = 1			}			else if (quoted) {				printf("%s", sub)			}			else if (escaped) {				printf("%s", sub)				escaped = 0			}			else if (sub == " ") {				printf("\t")			}			else {				printf("%s", sub)			}		}	}	# line is just a bunch of normal fields	else {		for (i=1; i<=NF; i++) {			printf("%s", $i)			if (i < NF) {				printf("\t")			}		}	}		printf("\n")}' |# read file and output fields wantedawk -F'	' '# get the fields from the command lineBEGIN {	EXTRACT="'"$fields"'"	nextract = split(EXTRACT, extract, " ")}# extract field definition info from file/^#FIELDS/ {	nfields = 0	for (i=2; i<=NF; i++) {		# field is a paramter		if ($i ~ /\=/) {			n = split($i, part, "=")			keyword = part[1]			value = part[2]			# prefix			if (keyword == "prefix") {				prefix[nfields] = value			}			# suffix			else if (keyword == "suffix") {				suffix[nfields] = value			}			else if (keyword == "no") {				no[nfields] = value			}		}		#field name		else {			nfields++			fields[nfields] = $i			prefix[nfields] = ""			suffix[nfields] = ""			no[nfields] = ""		}	}}# process a record! /^#/ && ! /^$/ && ! /^[ 	][ 	]*/ {	# scan the list of fields to extract and compare them with the	# list in the file and print as they are encountered	for (i=1; i<=nextract; i++) {		for (j=1; j<=nfields; j++) {			if (fields[j] == extract[i]) {				break			}		}		if (j > nfields) {			printf("***ERROR*** field not found - %s\n", extract[i])			continue		}		if (i > 1) printf("	")		# no overide character for this field		if (no[j] == "") {			printf("%s%s%s", prefix[j], $j, suffix[j])			continue		}		# overide character exist - split up the field		n = length($j)		first = substr($j, 1, 1)		last = substr($j, n, 1)		# no overide character in field value		if (first != no[j] && last != no[j]) {			printf("%s%s%s", prefix[j], $j, suffix[j])			continue		}		middle = ""		if (n >= 3) {			middle = substr($j, 2, n-2)		}		if (first != no[j]) {			printf("%s%s", prefix[j], first)		}		printf("%s", middle)		if (last != no[j]) {			printf("%s%s", last, suffix[j])		}	}	printf("\n")}'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -