多种方式文本处理——javascript脚本、bash脚本、python脚本

本文介绍了使用JavaScript、bash脚本和Python处理文本的各种方法,包括行首行尾添加字符串、搜索文件中的特定字符串、正则表达式匹配、IP排序、邮件地址提取等。通过示例代码展示了如何高效地操作和分析文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信搜索我吃你家米了关注公众号

在这里插入图片描述

友链

行首行末添加字符串

实际应用场景:
	我们现在有一个只有cmd功能的system权限的windows shell
	主机为xp 32位,3389处于打开状态,我们想使用ew将其3389端口代理出来,但是xp既没有bitsadmin又没有certutil,我们可以选择使用vbs脚本进行下载,这时我们就需要通过echo命令来将vbs脚本的内容写入到目标主机的一个文件中,如果手动一行一行地使用echo命令写入,实在是太麻烦了,我们可以借助sed强大的文本处理功能,在原来的vbs的每一行的行首和行尾加上“echo ”和“>>%temp\update.vbs%”,首先将vbs内容写到test中,然后执行下面两条命令,复制test中的内容,直接粘贴到我们的cmd shell上,一次性执行完所有的写入命令,最后再执行cscript.exe %temp%\update.vbs即可
	
		sed -i 's/^/&echo /g' test
		sed -i 's/$/& >>%temp%\\update.vbs/g' test
		
	第二条命令中多出来的反斜杠为转义符

搜索当前目录中的所有文件,查找指定字符串

​ 应用场景,调试PHP时,寻找某一字符串是由哪一个文件输出的

	grep -nr "print" *
		r选项代表递归(查询子目录)
		*代表所有文件

截取字符串

应用场景:
​ 现在我要从一份泄露的邮箱账户中截取出密码,形式如下:
test@test.com:test

​ 我需要截取出:后面的字符串

只需要使用下面这条命令即可:

var="test@test.com:test"
echo ${
   var#*:}

获取子串在母串中的偏移量

echo $a | grep -bo ":" | sed 's/:.*$//'

grep -bo ":"打印样式匹配所位于的字符或字节偏移,如果不使用sed进行处理,会把我们要匹配的字符也跟在后面,并使用:分割,因此我们需要使用sed的正则匹配,将:以及:之后的所有字符替换成空

反转字符串

echo str | rev

剔除含有某一字符串的行

sed -i '/keywords/d' filename

提取出包含某一字符串的行

sed -n '/keywords/p' filename

JS提取域中的主机

我们使用dsquery导出的计算机结果基本上是对下面这个样子:

"CN=CR-50,OU=Coumputers_CR,DC=domain,DC=com"
"CN=CR-55,OU=Coumputers_CR,DC=domain,DC=com"
"CN=CR-54,OU=Coumputers_CR,DC=domain,DC=com"

我们可以使用下面这个脚本,将主机名提取出来:

var str = `
"CN=CR-50,OU=Coumputers_CR,DC=domain,DC=com"
"CN=CR-55,OU=Coumputers_CR,DC=domain,DC=com"
"CN=CR-54,OU=Coumputers_CR,DC=domain,DC=com"
`


str.trim().split('\n').forEach(function(v, i) {
var result = /.*?"CN=(.*?),.*?/.exec(v);
document.write(result[1]);
document.write("</br>");
})

这样就可以在浏览器中输出主机名了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0okFxmNn-1577626329317)(文本处理.assets/1559671648455.png)]

对脚本的改进,这样的正则可以防止匹配到dn中的其他OU,只筛选出dn中带有OU=TTT的dn中的主机名部分,因为我们使用[\w|-]*?,排除了,的出现,这样就不会匹配到其他的OU,又因为是(非贪婪)模式,所以就达到了预期的目的

str.trim().split('\n').forEach(function(v, i) {
var result = /.*?CN=([\w|-]*?),.*?OU=TTT.*?/.exec(v);
if(result !== null) {
document.write(result[1]+".megafon.ru");
document.write("</br>");
}
})

然后用该脚本测试那些主机可以联通:

@echo off

setlocal ENABLEDELAYEDEXPANSION 

for /f %%i in (dn.txt) do (
	echo %%i
	net use \\%%i\ipc$ "password" /user:cotoso.com\administrator >>temp.tmp 2>&1
	for /f %%l in ('type temp.tmp ^| find /i "1326" /c') do ( 
        if %%l equ 1 (
			echo %%i>>res.txt )
	)
	del temp.tmp
)

使用JS从任意字符串中提取出IP地址

正则表达式:

(\d{1,3}\.){3}\d{1,3}

\d{1,3}\.表示匹配一个1~3个数字组成的字符串和一个.

d.元字符需要转义所有前面的那个\,这个是正则的基础语法,不需要我多解释

将它们用()括起来,作为一个匹配模式,后面的{3}表示该匹配模式要重复3次,最后再跟上一个\d{1,3},由1~3个字符组成的数字

这样就能匹配到所有符合IP地址特征的字符串了

使用JS实现,代码如下:

var str = `
172.96.244.114  testsetsetset   testsetsetset    testsetsetset  testsetsetset104.224.181.204     asdasdasd   testsetsetset    testsetsetset  testsetsetset67.230.185.196  testsetsetset   testsetsetset    testsetsetset    testsetsetset104.224.144.160     testsetsetset   testsetsetset    asdasdasd                    testsetsetset104.224.182.250     testsetsetset   testsetsetset    testsetsetset             testsetsetset104.224.190.79  testsetsetset testsetsetset     2oixMlMlzAPPkUxt    testsetsetset   testsetsetset95.163.207.244  testsetsetset   testsetsetset    syi71eRZiehv                    testsetsetset172.96.241.42   testsetsetset   testsetsetset    testsetsetset  testsetsetset198.181.40.163  testsetsetset   testsetsetset    testsetsetset  testsetsetset104.224.178.144     testsetsetset   testsetsetset    testsetsetset  testsetsetset104.224.177.150     testsetsetset   testsetsetset    testsetsetset  testsetsetsetasdasdas
`
var result = str.match(/(\d{1,3}\.){3}\d{1,3}/g);
for ( var i = 0; i <result.length; i++){
	document.write(result[i]);
	document.write("<br />");
}

IP 排序

sort -t . -k 3,3n -k 4,4n /path/to/file >> /path/to/newfile

JAvascript正则提取出符合条件的字符串

<html>
    <head>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
        <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
        <script src="http://code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
    </head>
    <body>
        
            function PreviewText() {
				var oFReader = new FileReader();
				oFReader.readAsDataURL(document.getElementById("uploadText").files[0]);
				oFReader.onload = function (oFREvent) {
					document.getElementById("uploadTextValue").value = oFREvent.target.result; 
					//oFREvent.target.result);
				var decodedString = atob(oFREvent.target.result.split("base64,")[1]);
					//data:text/html;base64,
					//data:text/plain;base64,
					//document.getElementsByTagName('xmp')[0].innerHTML = decodedString;//oFREvent.target.result;//;
					
					var lines = decodedString.split('\n');
					var fruits = [];
					for(var i = 0;i < lines.length;i++){
						var result = /dn: DC=(.*?),DC=corp.contoso.com,/.exec(lines[i])

						if(result != null)
							fruits.push(result[1])
					}
					//排序
					fruits.sort();
					
						
						//去重
					var uniqueNames = [];
					$.each(fruits, function(i, el){
						if($.inAr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值