腳本過濾字元
1. 如何用shell腳本語言去截取字元串
一. 概念
在shell中通過截取字元串操作可以提取到我們所需要的特定字元串
二. 操作符
① #表示 從左截取,刪除左邊字元,保留右邊字元
其中 str是變數名,# 號是運算符,*//表示從左邊開始刪除第一個 //號及左邊的所有字元
② %表示從右邊開始截取,刪除右邊字元,保留左邊字元
其中str是變數名,%號是運算符,/*表示從右邊開始刪除第一個/號及右邊的所有字元
③ ##表示從左邊開始截取,刪除左邊字元,保留右邊字元
其中str是變數名,##號是運算符,*/表示從左邊開始匹配最後一個(最右邊一個)/,並且刪除該/及前面的所有字元
④ %%表示從右邊開始截取,刪除右邊字元,保留左邊字元
其中str是變數名,%%號是運算符,/*表示從右邊開始匹配最後一個(最左邊一個)/,並且刪除該/及右邊的所有字元
⑤ 從左邊第幾個字元開始,及字元的個數
其中的 0 表示左邊第一個字元開始,10表示字元的總個數。
三.採用cut工具截取
-c選項表示用字元定位: 3,7表示截取第三個字元和第七個字元,4-9表示截取第四個字元到第九個字元
2. lua腳本中怎麼對比字元串
lua 字元串的比較 是檢測字元串的hash是否一樣來判斷兩個字元串是否相等
測試代碼如下:
local a = "dfadfafdasf"
local b = "dfadfafdasf"
print(a==b)
3. asp網站:跨站腳本攻擊漏洞,需要過濾哪些字元、
方法是多的。最好的方法是用 正則表達式 方法。
過濾 ,『 / '\ // /*
應該是根據你的語言腳本的sql語句注釋語句類。
4. java怎樣過濾危險字元,該怎麼解決
就WEB應用來說,所謂危險的字元一般就是兩種
一個是SQL注入,一個是HTML語法注入
SQL注入主流的框架都可以搞定,JDBC永遠都使用preparedstatement就可以防止所有的sql注入,關鍵是用戶輸入都要通過佔位符往裡放,就自動的替換掉了特殊字元了。hibernate等orm框架都會搞定這個問題
HTML語法注入是指用戶輸入的html代碼回顯出來,這樣如果不轉義就可以破壞頁面的結構或者注入腳本。所以現在的網站都不允許用戶直接輸入html代碼了,現在都是一些UBB標簽來完成一些效果。HTML主要最好的解決辦法是在回顯的時候進行轉義,所有的MVC框架或者展示層框架都有HTML轉義的支持,包括struts,spring,volicty等,注意觀察他們用於顯示的標簽
5. shell腳本怎麼去除不可見字元
你是不是說反了哦,如果是有不可見字元,應該是LEN的比看見的長,LEN為4、看見卻是7個,這個不可能是非法字元引起的,只可能是顯示格式造成的。 一般說來不會有不可見字元,最多可能的就是空格、回車這些,可以插入輔助列
6. 如何防止SQL注入,並通過腳本來過濾SQL中注入的字元
如果您通過網頁獲取用戶輸入的數據並將其插入一個MySQL資料庫,那麼就有可能發生SQL注入安全的問題。
本章節將為大家介紹如何防止SQL注入,並通過腳本來過濾SQL中注入的字元。
http://e.cnzz.cn/201509/96863872.shtml
7. shell腳本如何刪除指定字元串,文檔如下:
用正則匹配就可以了。
shell腳本regex正則表達式 和 字元串替換
任意字元
^行首匹配
$行尾匹配
^$表示空行,不含字元的行
^
$匹配只有單個空格的行
[0-9]
[a-zA-Z]
^[A-
Z]搜索以大寫字母開頭的行
[^A-Z]匹配大寫字母意外的任意字元
*表示匹配0個或若干個字元,如:a*,表示匹配0個或若干個a;
aa*表示匹配至少1個a
.*來表示0或若干個任意字元
e.e*表示匹配第一個e和最後一個e之間的任意字元
[-0-9]匹配一
個連字元或數字
[]a-z]匹配一個]或者字母
\{min,max\}匹配任意數目的字元串
[a-z]\{10\}只匹配10個
a-z字元的字元串
s/.\{5\}$// 刪除每行的最後5個字元
\(...\),n是1到9的數字,表示存儲用的寄存器,用\n來引
用存在寄存器中的內容
^\(.\)\1匹配行首的第一個字元,並將該字元存到1號寄存器中,然後匹配1號寄存器中的內容,這由\1的描述。該正則
表達式的最終效果是,如果一行的頭兩個字元相同,就匹配他們。
^\(.\).*\1$匹配一行中的頭一個字元(^.)跟最後一個字元(\1$)相
同的行。.*匹配中間的所有內容
^\(...\)\(...\)行中頭三個字元存在1號寄存器,接著的三個字元存在2號寄存器.
s/\(.*\)
\(.*\)/\2 \1/g 交換兩個欄位
.任何字元
^行首
$行尾
*前導的正則表達式重復0或若干次
[字
符表]字元中的任一字元
a..表示a後的2個字元
^wood表示行首的wood
x$表示行為的x
^INSERT$只包含
字元串INSERT的行
^$不包含任何字元的行
x*表示0或若干個連續的x
xx*表示1或多個連續的x
.*表示0活若干
個字元
w.*s表示以w開始,s結尾的任何字元串
[tT]小寫或大寫的t
[^字元表]表示任一不在字元表中的字元 [^0-9]
[^a-zA-Z]
\{min,max\}表示前導的正則表達式重復只燒min次,至多max次[0-9]\{3,9\}表示3到
9個數字
\(...\)表示將小括弧中匹配的字元串存儲到下一個寄存器中(1-9),
^\(.\)表示行中第1個字元存到1號寄存器
^\
(.\)\1表示行首戀歌字元,且他們相同
cut -c5 file把file文件中沒行的第5個字元析取出來;
用逗號分割的數
值列表,如-c1,13,50把第1,13,50個字元析取出來
cut -c20-50把第20到50之間的字元析取出來
如
who | cut
-c1-8
who | cut -c1-8,18- 析取行中的第1到8個字元(用戶名)和第18到行尾的字元(登錄時間)
cut -ddchar
-ffields file其中,dchar是數據中分割各欄位的分割符,fields表示要從文件file中析取出來的欄位.
字
段編號從1開始,而且格式跟以前將的用來指定字元位置的數字一樣(如-f1、2、8、-f1-3、-f4-)。
cut -d: -f1
/etc/passwd
如果已知欄位之間使用製表符分隔的,就可以給cut命令用-f選項而不用-c選項,好多了!還記得吧,這里用不著用-d選
項來指定分割符,因為
cut把製表符默認為分割符。
paste和cut正好相反,它不是把行分離開,而是把多行合並在一起。
paste
names numbrs文件names中的每一行都和numbers中的對應行顯示在一起,中間用製表符分割。
如果不想用製表符作默認分割,
可以使用-dchars指定分割符
paste -d'+' names addresses numbers
-s選項告訴paste把同
一文件中的行粘貼在一起,而不是從其他文件。如果只指定一個文件名,其效果是把文件中的所有行合並成一行,原來隔行之間用製表符或者有-d選項指定的分割
符分割。
sed是用來編輯數據的程序,意指流編輯器(stream editor)。與ed不同,sed不能用於交互,
-n選
項,然後使用p命令顯式指定
sed -n '1,2p' file只顯示前2行
sed -n '/Unix/p'
file只列印包含Unix的行
刪除行
d刪除整行文件
sed '1,2d' file刪除1和2行
記住sed默認把輸入
的所有行寫入標准輸出,所以生於行的文字,也就是從第3行到結尾,都被寫入標准輸出。
sed '5d'刪除第5行
sed
'/[Tt]est/d'刪除包含test或Test的行
sed -n '20,25p' test只顯示文件test的第20行到第25行
sed
'1,10s/unix/UNIX/g' intro報intro前10行中的unix改為UNIX
sed
'/jan/s/-1/-5/'將所有包含jan的行中第1個-1改為-5
sed 's/...//'
data刪除data文件每一行的前3個字元
sed 's/...$//' data刪除data文件每一行的最後3個字元
sed -n 'I'
text顯示文件text的所有行,把所有不可列印字元顯示為\nn,製表符顯示為\t
過濾器tr用來轉換來自標准輸入的字
符,tr命令的一般格式為
tr from-chars to-chars
tr e x <
intro把所有字母e轉換成x
tr命令的輸入必須重定向到文件intro,因為tr總是從標准輸入獲得輸入;轉換的結果寫入標准輸出,而原始文
件保持不變。
cut -d: -f1,6 /etc/passwd | tr : ' '
通過在管道線的最後加上適當的tr命令,就可以把冒號轉換成製表符,這樣產生的輸出更容易看
單引號中括的是製表符(盡管你看不到)。必須將它括在
引號中,以便穿過shell,使tr有機會看到它。
使用\nnn來給tr提供8進製表示的字元
一些ascii字元的八進制值
響 鈴
7
退格 10
製表符 11
新行 12
換行 12
換頁 14
回 車
15
轉義 33
date | tr ' ' '\12'此例中,tr接受date命令的輸出,並把所有的空格轉換成換行
tr
'[a-z]' '[A-Z]'
<intro將所有小寫轉換為大寫
-s選項,tr命令中的-s選項用來壓縮to-chars中重復的字元,換句話說,如果轉換完成後,有
to-chars中的某個字元連續出現多次,則這些連續相同的字元被替換為一個字元。
如下面的命令將冒號轉換為製表符,並將多個連續製表符替換為
單個製表符:
tr -s ':' '\11\'
tr -s ' ' ' '
<lotspaces通過-s將多個空格全部壓縮為單個空格
-d選項用來刪除掉輸入流中的字元,其一般格式為
tr -d
from-chars任何列在from-chars中的字元都會被從標准輸入中刪除。下例用tr來刪除文件intro中的所有空格:
tr -d ' '
<intro
當然sed 's/ //g' intro也可以得到同樣的效果
tr 'X' 'x' 把大X專成小x
tr '()'
'{}' 把所有左小括弧轉換成左大括弧,右小括弧專成右大括弧
tr '[a-z]' '[A-Z]' 把小寫轉大寫
tr '[A-Z]'
'[N-ZA-M]' 把A-M字母分別專成N-Z把N-Z轉成A-M
tr ' ' ''把所有製表符轉換成空格
tr -s ' '
''把多個空格轉換成單個空格
tr -d '\14' 刪除所有換頁字元(八進制14)
tr -d '[0-9]'刪除所有數字
grep
'[A-Z]' list list中包含一個大寫字母的行
grep '[0-9]' data中包含數字的行
grep '[A-Z]...[0-9]'
list list中包含以大寫字母開始、數字結尾的5個字元組合的行
grep '\.pic$' filelist
filelist中以.pic結尾的行
uniq in_file
out_file該格式中,uniq把in_file復制到out_file,處理過程中,去掉其中的重復行。如果不指定第2個參數out_file,結
果就寫入標准輸出;如果in_file沒有指定,那麼uniq就成了一個過濾器,從標准輸入讀取輸入。
>或<
重定向,覆蓋原有的內容
>>或<< 重定向,想文件末尾追加內容
tee 顯示在終端上的內容存儲到文件 ls |
tee >glx
-d 目錄
-e 存在
-f 普通文件
-r 進程可讀文件
-s 長度不為0
-w
進程可寫文件
-x 可執行
-L 鏈接文件
$# 傳給程序的參數個數,或者執行set命令設置的參數個數
$*
對位置參數等的集中引用
$@ 跟$*相似,區別在於當加入雙引號後("$@"),集中引用位置參數"$1","$2"...等
$0
正執行的程序名
$$ 正執行程序的進程id
$! 最後一個發生後台運行的程序的進程id
$? 最後一個在前台執行的程序的退出狀態
$-
當前有效選項標志
`command`符號之間的內容為需要執行的命令
make -C /lib/moles/`uname -r`/build
M=`pwd`
使用echo可以顯示字元串,但是不能格式化字元串,可以使用printf實現
printf "format" arg1 arg2
...
ln -s from to 把from鏈接到to上,所以to是from的符號鏈接
tree -d只顯示目錄
tree -L
2顯示2級目錄
字元串比較
s1 = s2 s1等於s2
s1 != s2 s1不等於s2
s1
s1不為空
-n s1 s1不為空
-z s1 s1為空
整數比較操作
-eq 等於
-ge
大於或等於
-gt 大於
-le 小於或等於
-lt 小於
-ne 不等於
[ "$x1" = 5 ]字元串比較
[
"$x1" -eq 5 ]整數比較
-a 邏輯與操作
-o 邏輯或操作
command1 &&
command2
則先執行command1,如果返回的退出狀態
為0,則執行command2;如果command1返回的退出狀態非0,則跳過command2
command1 ||
command2
和上邊的&&差不多,只是,僅僅當command1返回非0時,才執行command2
#!/bin/sh
append2=0
include_lib=1
if
[ -f cscope_i ];then
rm cscope_i
fi
for cscope_file in $*; do
if [ -f "$cscope_file" ] || [ -d "$cscope_file" ];then
# if [
$cscope_file = '-a' ];then
# append2=1
# continue
#
fi
#
# if [ $cscope_file = '-n' ];then
#
include_lib=0<F11>
# continue
# fi
if [ "$append2" = "1"
];then
find $cscope_file -maxdepth 1 -name '*.[cChH]' -o -name
'*.[cC][pP][pP]'>>cscope_i
else
find $cscope_file -name
'*.[cChH]' -o -name '*.[cC][pP][pP]'>>cscope_i
fi
else
if [
$cscope_file = '-a' ];then
append2=1
elif [ $cscope_file = '-n'
];then
include_lib=0
else
echo "Error: cannot read file
$cscope_file"
fi
fi
done
if [ -f cscope_i ];then
if [
"$include_lib" = "1" ];then
cscope -bi cscope_i
else
cscope -bki cscope_i
fi
rm cscope_i
fi
#linux(ubuntu)
8. 求一個去除字元串中漢字的腳本.要多少分你隨便開
以前收藏過一段剪切板相關的代碼,現在改動了一下,能滿足你的要求,C#的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace ClipboardTool
{
public class ClipboardHelper
{
#region 調用Windows API
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UnhookWindowsHookEx(IntPtr hhk);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern IntPtr GetMoleHandle(string lpMoleName);
#endregion
private const int WH_KEYBOARD_LL = 13;
private const int WM_KEYDOWN = 0x0100;
private static LowLevelKeyboardProc proc = HookCallback;
private static IntPtr hookID = IntPtr.Zero;
public static void RunHook()
{
hookID = SetHook(proc);
}
public static void UnHook()
{
UnhookWindowsHookEx(hookID);
}
private static IntPtr SetHook(LowLevelKeyboardProc proc)
{
using (Process curProcess = Process.GetCurrentProcess())
{
using (ProcessMole curMole = curProcess.MainMole)
{
return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetMoleHandle(curMole.MoleName), 0);
}
}
}
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
Keys key = (Keys)Marshal.ReadInt32(lParam);
//按下Ctrl+V粘貼數據
if (Control.ModifierKeys == Keys.Control && key == Keys.V)
{
//獲得剪切板數據
string dataText = Clipboard.GetText(TextDataFormat.UnicodeText);
//過濾掉漢字
dataText = Regex.Replace(dataText, @"[\u4e00-\u9fa5]+", "");
//重新設置剪切板數據
DataObject dataObject = new DataObject();
dataObject.SetData(DataFormats.Text, true, dataText);
Clipboard.SetDataObject(dataObject, true);
}
}
return CallNextHookEx(hookID, nCode, wParam, lParam);
}
}
}
使用的話,可以建個窗體、或控制台或其他,此處以窗體為例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ClipboardHelper.RunHook();
}
}
運行後,在ctrl+v粘貼的時候就會過濾掉漢字了