是否有任何 linux 命令可以从可执行文件或其他二进制文件中提取所有 ascii 字符串?我想我可以用 grep 来完成,但我记得在某个地方听说过这样的命令存在?
我有一个 30gb 的磁盘分区(认为dd if=/dev/sda1 of=diskimage),我需要从中恢复一些文本文件。数据雕刻工具foremost只能处理具有明确定义的标题的文件,即不能处理纯文本文件,所以我依靠我的好朋友strings.
strings diskimage > diskstrings.txt 生成了一个 3gb 文本文件,其中包含一堆字符串,其中大部分是无用的东西,与我真正想要的文本混合在一起。
大多数垃圾往往是非常长的,不间断的胡言乱语。我感兴趣的东西保证小于16kb,所以我将按行长过滤文件。这是我用来执行此操作的 Python 脚本:
infile = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
if len(line) < 16384:
outfile.write(line)
infile.close()
outfile.close()
Run Code Online (Sandbox Code Playgroud)
这有效,但供将来参考:是否有任何神奇的单行咒语(想想awk, sed)可以按行长度过滤文件?
在 Linux 中,如何在文本文件中显示包含字符串的行,例如:
search "my string" file_name
Run Code Online (Sandbox Code Playgroud)
如何使搜索区分大小写/不区分大小写?以及如何显示行号?
问候
给定任何 GitHub 存储库 url 字符串,例如:
git://github.com/some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)
或者
git@github.com:some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)
或者
https://github.com/some-user/my-repo.git
Run Code Online (Sandbox Code Playgroud)
从以下任何字符串中bash提取存储库名称的最佳方法是什么my-repo?该解决方案必须适用于上面指定的所有类型的 url。
谢谢。
是否有一种可移植的 unix shellscripting 方式将多个字符串与给定的分隔符连接在一起,如下所示:
$ strjoin --- foo bar baz quux
foo---bar---baz---quux
Run Code Online (Sandbox Code Playgroud)
当然我可以在 shellscript 函数中使用 $scripting_language 单行或丑陋的显式循环,但是老的 unix 黑客可能也有一些需要,所以有人做了这样一个我不知道的标准命令过去的某个地方,对吧?
编辑
该sed方法在许多情况下当然是最简单的方法,但如果字符串可以包含空格,则它不起作用。许多其他答案也没有处理这个问题。除了$IFS处理空格(以及一般所有可能的字符)并且不需要编写完整循环的技巧之外,还有其他解决方案吗?
我希望能够按-字符拆分授权码,以便我可以单独对每个段进行操作。我不想使用外部二进制文件 ( awk, grep) - 这是尽可能简约的。我有哪些方法可以实现这一目标?
这是一个示例身份验证代码:
82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb
在我的 puppet 配置中,我需要在模板中使用变量值之前将其小写。如何实现这一目标?有没有办法小写人偶清单中的变量值?我需要在模板中执行此操作吗?
更一般地说:我可以在清单中使用的字符串操作函数在哪里。
我是否必须编写自己的自定义 ruby 函数来实现这一点?
如何将目录的最后一部分存储在变量中?
例如,我有以下路径:A\B\C\D,我想存储D在像file_name=D.
亲爱的 Serverfault 社区,
我有以下问题:如果在数据包数据中遇到某个字符串,我需要立即重置(断开)网络两侧的 tcp 连接。我无法控制双方的应用程序,只能使用 linux iptables(或类似工具)来执行连接中止。
我的第一个想法是使用以下 iptables 规则来实现我想要的:
/usr/sbin/iptables -A INPUT -p tcp --dport 1234 -m string --algo bm --string 'BAD STRING' -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
通过向客户端发送 TCP RST 数据包,这将在远程端完美地工作,因此客户端将立即断开连接。不幸的是,在强制断开连接时不会通知本地端,并且服务器进程(连接)永远挂起。
我认为在特定条件下(在这种情况下 IP 数据包中的字符串匹配)立即断开双方已经建立的连接的要求并不少见。所以我进行了谷歌搜索,但令我惊讶的是在合理的时间内找不到任何可用的东西。
有没有办法使用iptables在网络两侧实现tcp断开连接?如果没有,我可以使用哪些其他工具(请记住,我无法控制客户端/服务器应用程序)?
非常感谢您的宝贵回答!
此致,
延斯
我正在尝试从我们其中一台服务器上的许多文本文件中删除一个字符串。所有这些文件中的字符串都是相同的,我可以运行:
grep -r -l 'string'
Run Code Online (Sandbox Code Playgroud)
获取文件列表,但我一直在思考如何将文件编辑并再次写出到它们的原始位置。听起来像是 sed 的工作,但不确定如何处理输出。
我尝试从以下字符串(使用创建who am i)中提取主机名:
username pts/0 2010-10-05 17:30 (www.example.com)
Run Code Online (Sandbox Code Playgroud)
我需要一个解决方案,如果 (www.example.com) 不存在(当我在本地登录时就是这种情况),它也可以工作。此外,该解决方案还必须在who am i返回以下字符串的 Mac 上运行:
username ttys006 Oct 5 16:47 (www.example.com)
Run Code Online (Sandbox Code Playgroud)
问题是 mac 在日期中放置了空格,这使得它难以使用cut。我认为,必须有一个sed用于提取子字符串的解决方案,但是我在弄清楚如何正确使用时遇到了问题sed。
更新:疯狂的方法
这种方法只有在实际存在括号时才有效。如果不是,则会发生以下情况:
$ who am i | cut -f2 -d '(' | tr -d ')'
username ttys006 Oct 5 16:47
Run Code Online (Sandbox Code Playgroud) 如何用sed删除一行中的所有字符?
我有一个像这样多行的文件:
现在我想删除前 10 个字符之后的所有字符。所以我只希望我的输出是:
我在谷歌上搜索 sed 的特定示例,但在这些示例中没有找到任何帮助。