How can I edit a file if there is no vi, vim, joe, etc?

Is there a way to edit a file if there are no vi, vim, joe, mcedit? In another words is there a way to edit a file using just the shell commands?


Solution 1:

In that instance, I'd try transferring files out and editing them on another computer, then transfer them back. If you have ssh, you should have scp (I hope), so you should be able to push files in and out. If not, you can also look for ftp to transfer files in and out.

If not, then I think your best option is to try and make use of cat, grep, sed, echo, and I/O redirection (especially append with >>). And lots of temporary files.

Though if you have access to perl (or something similar), you can run it with no arguments and it will let you input a script source from standard input. Once you press ctrl+d, it can then run the script. You could use that method to create a file. It would be more powerful than hacking something on the command line as I mentioned before.

Solution 2:

One way would to be to output the result of an echo.

echo "foo" > bar.txt

This will make a file titled bar.yxy with the containing text, "foo".

Solution 3:

Use a terminal that lets you copy and paste with the mouse, and assemble your files that way?

e.g.  cat > myfile
(use terminal to copy/paste)
^D

If it is a binary file, use this to turn it into text which you can copy with the mouse:

 openssl base64 -in <infile>

then on another computer, openssl again to decode it using the -d switch, edit however you like (e.g. hexedit) then re-encode, and on the box with no editor, openssl again to decode it and paste from your terminal. do

Solution 4:

Assuming you're SSH'ing into your router, you can also use various utilities to transfer the file back and fourth to your computer/router. You can download a copy on your PC, modify it, and then SSH it back to the router via SFTP (see Putty or WinSCP if you're a Windows user).

If you're using a custom firmware on the router/gateway, however, you may be in luck. There are various Optware packages containing simple (and small) text editors. Depending on your needs, you could get the nano package, or just go for busybox which contains vi.

Solution 5:

I imagine you could do what you need with grep and perl - look for the line you want with grep, edit that line with perl (perl can act like a big replacement for sed) and then confirm you didn't make more changes than you intended by doing diff filename filename.new. If so, make the changes permanent - mv filename.new filename