Articles of unix

如何从一个不可预测的格式化文件中提取单/多行正则expression式匹配的项目,并把每一个单行放入输出文件?

我有一个非常巨大的文件,看起来像这样: <a>text</a>text blah <b>data1</b>abc<b>data2</b> <b>data3</b>blahblah <c>text</c> <d>text</d> <x>blahblah<b>data4 data5 data6</b> <b>data7 </x> 也就是说,它的格式是不可预测的。 我需要提取每个<b>…</b>项目(它可能包含多行文本!),并把它们中的每一个放在一个单独的行中。 同时,我需要用一个空格replace换行符和空格。 期望的输出: <b>data1</b> <b>data2</b> <b>data3</b> <b>data4 data5 data6</b> 我发现的只有两个步骤: gawk '{if ($0 != "") { printf "%s", gensub(/\s+/, " ", "g", gensub(/\s+$/, "", "g", $0)) } }' path/to/input.txt > path/to/single-line.txt 接着 grep -Pzo '(?s)<b>.*?</b>' path/to/single-line.txt > path/to/output.txt 但我不喜欢它! 不得不将一个多GB的文本文件转换为一行…似乎不是很好。 是否有可能一次性“解决”这个问题?

Linux上的Vim以CRLF结尾保存文件

我一直在使用vim,这是我第一次遇到这个问题。 当我打开VIM它抱怨在我的vimrc文件中有CRLF结尾(错误:不是编辑器命令^ M),但是当我用vim打开文件时,我没有看到任何地方的^ M。 fileformat设置为unix , ffs是unix,dos 。 这里是一个截图(对不起,我只是让我的帐户,所以我不能张贴截图): http : //i.stack.imgur.com/3PjM8.png 当我在我的vimrc上使用unix2dos并打开vim时,我仍然有CRLF错误,但是这次显着减less了错误,并且在行尾没有看到^ M。 fileformat设置为dos , ffs是unix,dos 。 这是一个截图(对不起,我只是让我的帐户,所以我不能张贴截图): http : //i.stack.imgur.com/c74RE.png 我曾尝试使用dos2unix和unix2dos,使用vim设置ff和ffs ,使用gedit和Sublime Text 3,甚至从GitHub获取我的旧vimrc文件。 我也试过将vim降级并在完全从系统中删除后重新安装。 我在Arch Linux上使用Vim 7.4.778(i686 gvim包)。 目前我所有的.vimrc文件都是这样的: "NeoBundle Scripts—————————– if has('vim_starting') if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath+=~/.vim/bundle/neobundle.vim/ endif " Required: call neobundle#begin(expand('~/.vim/bundle')) " Let […]

列出帐户未被locking的用户

我创build了一个脚本,列出服务器中的用户列表,并通过电子邮件发送给他们。 我可以从多个主机获取用户列表,还可以在发送列表之前过滤名为ignore.txt(具有不需要的用户)的文件。 现在的挑战是, /etc/passwd具有账户被locking(不活动)的用户。 是否可以编辑下面的脚本并发送活动用户的列表,以及帐户被locking的用户列表? 新报告应反映活跃用户的列表以及禁用/locking用户的列表。 我目前的脚本如下: #!/bin/ksh #title :user.list.script.ksh #description :This script collects list of users from the server #note :Multiple hosts can be added #HOSTS format: HOSTS="00.00.00.00-DEV" #example "hostname-DEV" FILE=/home/zaira/report.txt #list will be saved in report.txt date > $FILE echo >> $FILE for host in $HOSTS; do ip=$(echo $host|cut -d '-' -f 1) […]

保持活着ssh会话与脚本bash / expect

你好人们我试图做一个脚本bash使用期望部分进入服务器,并保持活动会话,我的脚本如下: #!/bin/bash /usr/bin/expect << eof spawn ssh user@server set prompt ":|#|\\\$" expect "password" interact eof 我可以进入服务器,但是会话在一秒钟后死亡,并返回到我的本地计算机, 任何人都可以帮我吗?

线程行为时,未join和主进程终止

我有一个进程,它创build一个pthread,但是这个线程没有连接到主线程。 这个线程有一个无限循环。 当进程启动的时候,这个线程也会启动,但是如果这个进程被SIGKILL杀死了,这个线程会自动被终止,还是会变成僵尸线程呢? 谢谢, 罗希特

如何匹配Bash中最后两个stringpasterns之间的所有行?

我有一些重复的关键字,如“开始”和“结束”,其间有几行(包括空格)的日志文件。 我想grep这两个标签之间的所有线 – 但只为最后recursion。 例如: Start 1 2 End Start ABC Start Three End 结果只能是“三”

如何使用sed将两个字符转换为一个

我只需要改变两个字符( \t\n )( \t )。 所有以Tab结尾的行都会join下一行。 我用这个命令: sed -i 's/\t\n/\t/g' file.txt 但它什么都不做。

Makefile命令后检查日志的最好方法

我的一个项目的Makefile在functiontesting步骤的无头浏览器上运行了一堆testing。 大部分testing是针对前端代码的,但是我也会检查后端的任何错误/警告。 目前,我们正在清理Web服务器日志,运行所有(非常慢)的testing,然后在服务器日志中查找任何错误或警告。 我想知道是否有任何方法让侦听器从后台开始parsing日志(例如tail -f | grep ),并在testing运行期间检测到任何错误/警告时终止make target。 我到目前为止是 在后台启动长时间的grep并存储PID。 运行testing。 检查长寿命的grep的输出 杀死PID。 如有任何错误,则失败。 这只是给我的好处,现在我每次都不会丢失我的开发包上的服务器日志,因为我不必每次都清理它。 但是我还是要等很长时间(几分钟)才能发现第一个失败。 有没有解决scheme?

如何使用Java扫描根目录中的SUID文件并访问其属性?

我是UNIX系统的新手。 我负责在根目录中查找SUID文件,并访问其文件属性以完成某些操作。 有反正我可以写一个基于Java的应用程序来search文件的粘滞位,并访问其属性(文件权限/创builddate等)? **为此,我被要求不要在UNIX中使用“find”命令。 请帮忙。

如何在不删除.o文件的情况下使用makefile进行编译?

我没有使用makefile的经验,但我设法让我的工作。 然而,当我修改一个文件,并希望新版本再次被编译时,我刚刚注意到,我需要删除以前生成的.o文件,使新的编译(另一方面,我被告知,没有什么可以做的) 。 是否有任何选项可以添加到一个生成文件,使其replace旧的.o(只有当它是一个旧版本)与新的? 或者至less,这就是我认为我的解决scheme。 提前致谢, 爱德华多 PD:在这里你有我的Makefile,以防你需要它。 todo: Sensor Control Lista #Ficheros de los que depende Sensor: Sensor.o semaforo.o memocomp.o colamsg.o #Cómo crea esos ficheros g++ Sensor.o semaforo.o memocomp.o colamsg.o -o Sensor -lrt -lpthread Control: Control.o semaforo.o memocomp.o colamsg.o g++ Control.o semaforo.o memocomp.o colamsg.o -o Control -lrt -lpthread Lista: Lista.o semaforo.o memocomp.o colamsg.o g++ […]