How to extract numbers of a string unix

Viewed 137

Hello and happy new year. I have a question;i have a file named shipsIMO.txt in unix which contains the imo code of ships like:

IMO84855
IMO58484

How can I have as an output only the numbers using a bash script? Am I close?

echo "shipsIMO.txt"|tr -cd [:digit:]>single.txt
3 Answers

How can I have as an output only the numbers

In that case, you are very close. echo "shipsIMO.txt" will not print the content of the file. It'll literally print shipsIMO.txt. To print the content of the file, use cat:

cat shipsIMO.txt | tr -cd '[:digit:]' > single.txt

or without cat, making tr read directly from the file:

tr -cd '[:digit:]' < shipsIMO.txt > single.txt

Both versions above would create single.txt with the content (no spaces or newlines):

8485584855

If you want to ...

# keep whitespaces (including newlines) and digits:
tr -cd '[:space:][:digit:]' < shipsIMO.txt > single.txt

# keep only newlines and digits:
tr -cd '\n[:digit:]' < shipsIMO.txt > single.txt

Both would produce single.txt with this content:

84855
84855

You can do this easily with sed, removing all non-numeric characters:

sed -e 's/[^0-9]//g' shipsIMO.txt

You can try with sed to remove all IMO string, it will work with space and line break:

sed 's/IMO//g'  shipsIMO.txt > single.txt
Related