tr - حذف یا تبدیل کاراکترها

tr - از این دستور برای حذف یا تبدیل کاراکترها از ورودی استاندارد و نمایش حاصل آن در خروجی استفاده می‌شود.

شکل کلی دستور:

$ tr [OPTION] SET1 SET2

کار را با یک مثال ساده شروع می‌کنیم. من دو فایل ایجاد کردم که نام یکی از آن‌ها به نام input و نام فایل دیگر، output است. محتوای فایل دوم خالی و محتوای فایل اولی را با دستور cat مشاهده می‌کنیم :

$ cat .../input
one

منظور از ... مسیر فایل است.

حال می خواهیم کلمه‌ی one را به two تبدیل کنیم و حاصل را در فایل output ذخیره کنیم پس :

$ tr "one" "two" < .../input > .../output
two

حال محتوای فایل output باید واژه two باشد که این محتوا را باهم مشاهده می کنیم:

$ cat .../output
two

این دستور را می‌توان به صورت پایپ (یا لوله‌کشی) هم استفاده کرد برای مثال :

$ echo "www.30li.ir" | tr [:lower:] [:upper:]
WWW.30LI.IR

در اینجا توسط دستور echo یک متنی را در نظر گرفتیم و سپس بعد از علامت عمودی که نشان دهنده‌ی پایپ کردن هست، خروجی را به ورودی دستور tr می‌دهیم. دستور tr تمامی کاراکترهایی را که به صورت کوچک هستند را به بزرگ تبدیل می کند. این دستور می توانست به شکل زیر هم ظاهر بشود که خروجی تفاوتی نخواهد کرد:

$ echo "www.30li.ir" | tr a-z A-Z
WWW.30LI.IR

در واقع دراینجا به دستور tr می‌گوییم که تمامی حروف از a تا z را به حروف بزرگ تبدیل کن(به A تا Z بزرگ تبدیل کن).

بعضی از گزینه‌های دیگر :

[:alnum:] : مخفف all letters and digits بوده و به این معنی است که تمامی حروف و اعداد را در بر می‌گیرد. مثال :

$ echo "www.30li.ir" | tr [:alnum:] 1
111.1111.11

به این معنی است که بجای تمامی کاراکترهای رشته‌ی "www.30li.ir" عدد 1 را جایگذاری کن.

[:alpha:] : منظور تمامی حروف است و اعداد شامل آن نمی‌شود. مثال :

$ echo "www.30li.ir" | tr [:alpha:] "*"
***.30**.**

به این معناست که به جای تمامی حروف (نه اعداد) رشته‌ی "www.30li.ir" کاراکتر ستاره (*) جایگزاری کن.

[:blank:] : منظور تمامی فضاهای خالی است. مثال :

$ echo "www 30li ir" | tr [:blank:] "."
www.30li.ir

در مثال بالا، فضاهای خالی رشته را با . جایگذاری کرد.

[:digit:] : منظور تمامی اعداد است و حروف شامل آن نمی‌شود. مثال :

$ echo "www.30li.ir" | tr [:digit:] "*"
www.**li.ir

بجای اعداد 3 و 0 ستاره گذاشته شد.

[:lower:] : تمامی حروفی که بصورت کوچک(مثل a و نه A) هستند را در برمی‌گیرد و واضح است که اعداد را شامل نمی‌شود. مثال:

$ echo "www.30li.ir" | tr [:lower:] "*"
***.30**.**

[:upper:] : تمامی حروفی که بصورت بزرگ (مثل A و نه a) هستند را در برمی‌گیرد و واضح است که اعداد را شامل نمی‌شود. مثال:

$ echo "www.30li.ir" | tr [:lower:] [:upper:]
WWW.30LI.IR

در اینجا رشته از حالت حروف کوچک، به بزرگ تبدیل شد.

گزینه‌های اختیاری:

c-: همین‌طور که از نام برگرفته‌ی آن پیداست(complement = به معنای متمم  )، این گزینه به صورت عکس عمل می کند. مثال:

$ echo "www.30li.ir" | tr -c [:digit:] "*"
****30******

در واقع ما توقع داریم که به‌جای اعداد در رشته‌ی "www.30li.ir"، ستاره قرار بگیرد ولی همین‌طور که می‌بینید، تمامی حروف ستاره شده و اعداد تغییری نکرده است.

d-: همین‌طور که از نام برگرفته‌ی آن پیداست(delete = حذف کردن)، این گزینه، set1 را از مجموع حاصل حذف می‌کند. مثال :

$ echo "www.30li.ir" | tr -d [:alpha:]
.30.

در خروجی حاصل، تمامی حروف حذف شدند که این بعلت این گزینه‌ی اختیاری و [:alpha:] که به معنی تمامی حروف است، حاصل شده است.

جالب است که اگر دو گزینه‌ی اختیاری فوق را باهم استفاده کنیم، هم عملیات عکس و هم حذف را خواهیم داشت:

$ echo "www.30li.ir" | tr -cd [:alpha:]
wwwliir

بجای حذف تمامی حروف، اعداد حذف شده‌اند.