我对bash脚本行感到困惑
我正在尝试将bash脚本转换为一个实习生项目的python;基本上,脚本解析一个表,并将信息打印为HTML文档 这句话把我弄糊涂了。TMP是一个临时文档,是我对bash脚本行感到困惑,bash,Bash,我正在尝试将bash脚本转换为一个实习生项目的python;基本上,脚本解析一个表,并将信息打印为HTML文档 这句话把我弄糊涂了。TMP是一个临时文档,是lsload的输出,它输出一个包含服务器主机信息的表 # Force header text to lowercase tr '[:upper:]' '[:lower:]' <${TMP} |head --lines=+1 |sed -e 's/[ \t]\+/ /g' >${H_TMP} #强制标题文本为小写 tr'[:upp
lsload
的输出,它输出一个包含服务器主机信息的表
# Force header text to lowercase
tr '[:upper:]' '[:lower:]' <${TMP} |head --lines=+1 |sed -e 's/[ \t]\+/ /g' >${H_TMP}
#强制标题文本为小写
tr'[:upper:''[:lower:'${H_TMP}
好的,第一个tr
命令是将标题文本从大写转换为小写。我不确定head
命令在做什么。我对sed的功能也感到困惑。有人能澄清一下这方面的情况吗
作为奖励,有人对我如何将其转换为Python有什么想法吗
编辑:好吧,我似乎明白了
sed
在做什么;它将任意数量的空格或制表符转换为单个空格。现在对head
感到困惑。通过搜索任何Unix命令的手册页,您应该能够轻松找到该命令的文档
对Unix命令行的任何基本介绍还将揭示head
读取文本文件的前n行,而tail
相应地读取文本文件的最后n行
整个代码段对应于
以open(os.environ['TMP'])作为输入文件,以open(os.environ['H_TMP'],'w')作为输出文件:
对于inputfile中的行:
#sed的//[\t]+///g'是re.sub(…)
#翻译。。。较低()
line=re.sub(r'\s+','',line).lower()
outputfile.write(行)
#head--lines=1--在一行之后退出
打破
正则表达式escape\s
匹配许多不同的空白字符;如果您的输入是简单的ASCII码,它将与简单字符类[\t]
重叠。我们只能猜测,如果确实要处理Unicode,是否需要严格匹配这两个字符
为了获得最大的紧凑性,您可以将其降低到
以open(os.environ['TMP'])作为输入文件,以open(os.environ['H_TMP'],'w')作为输出文件:
outputfile.write(re.sub(r'\s+','',inputfile.readline()).lower())
如果您想读取固定数量的行,而该数字不是1,可以查看enumerate()
:
以open(os.environ['TMP'])作为输入文件,以open(os.environ['H_TMP'],'w')作为输出文件:
对于行号,枚举中的行(inputfile,1):
line=re.sub(r'\s+','',line).lower()
outputfile.write(行)
如果lineno==234:
打破
-n,--line=[-]K打印前K行,而不是前10行;以“-”开头,打印每个文件的最后K行以外的所有行
我想最好在tr
之前执行head
命令,也许您尊敬的脚本作者不知道您可以将lsload
的输出传递到tr
而不将其保存到中间的文件中?@corentilimiertr
只能读取足够的内容输入填充管道缓冲区,直到head
从缓冲区读取数据。交换它们可能会节省一些内存,这取决于最初读取的head
的数量。请查看一下,以便在Python中实际使用它,不过,循环是不必要的。只需使用line=next(inputfile)
或line=inputfile.readline()
。是的,我想如果未来的访问者想阅读一些数字不是1的行,将其显示为循环会更容易。